mysql实现读写分离
发布日期:2021-05-08 12:12:53 浏览次数:19 分类:精选文章

本文共 1278 字,大约阅读时间需要 4 分钟。

在项目中,我们采用了Spring AOP进行读写分离,通过动态切换数据源来提升系统性能。以下是具体实现方案:

1. AOP切面定义

我们在Service方法执行前,通过AOP切面判断方法名开头是否为"query"、"find"或"get",从而决定使用从库还是写库:

public class DataSourceAspect {
@Pointcut("execution (* com.example.Service.* (..))")
public void before(JoinPoint point) {
String methodName = point.getSignature().getName();
if (isSlave(methodName)) {
markSlave();
} else {
markMaster();
}
}
private Boolean isSlave(String methodName) {
return StringUtils.startsWithAny(methodName, "query", "find", "get");
}
}

2. DynamicDataSource实现

我们定义了一个DynamicDataSource,继承自Spring的AbstractRoutingDataSource,通过实现determineCurrentLookupKey方法来获取当前数据源:

public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DynamicDataSourceHolder.getDataSourceKey();
}
}

3. Target Data Sources Configuration

在Spring配置中,我们定义了多个数据源,并将它们注入目标数据源集合:

4. 数据库连接池配置

分别配置了读库和写库的连接池:

5. 数据库连接信息

配置了读库和写库的详细信息:

jdbc.master.url=jdbc:mysql://127.0.0.1:3381/taotao
jdbc.slave01.url=jdbc:mysql://127.0.0.1:3380/taotao

通过以上方案,我们实现了读写分离,有效提升了数据库性能。

上一篇:工作中实用maven命令(工作中用到随手记录)
下一篇:基于@Aspect @Component的切面类不生效

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月06日 09时04分45秒