先上代码
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DataSourceHolder.getDataSourceKey();
}
}
public class DataSourceHolder {
private static final ThreadLocal<String> threadLocal = new ThreadLocal<String>();
public static String getDataSourceKey() {
return threadLocal.get();
}
public static void setDataSourceKey(String dataSourceKey) {
threadLocal.set(dataSourceKey);
}
}
<bean id="dataSource" class="com.wjxie.test.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="master" value-ref="data_source_master" />
<entry key="slave" value-ref="data_source_slave" />
</map>
</property>
<property name="defaultTargetDataSource" ref="data_source_master" />
</bean>
最后定义切面(Advisor):在 Service 方法执行之前执行:若请求路径为 get/load/select/fetch 什么的,则执行 DataSourceHolder.setDataSourceKey("slave") ,否则执行 DataSourceHolder.setDataSourceKey("master") 。如有特殊需要,可以在方法体内手工指定想要使用的数据源。
AbstractRoutingDataSource 原理:
DynamicDataSource 在 getConnection() 时,会根据其 determineCurrentLookupKey() 返回的结果( "master" 或 "slave" ),去 Spring 配置文件里面查找对应的 targetDataSource 是 "data_source_master" 还是 "data_source_slave" ,然后建立其连接。
分享到:
相关推荐
一般来说,读写分离有两种实现方式。第一种是依靠中间件MyCat,也就是说应用程序连接到中间件,中间件帮我们做SQL分离,去选择指定的数据源;第二种是应用程序自己去做分离。这里我用程序自己来做,主要是利用Spring...
MySQL读写分离又一好办法 使用 com.mysql.jdbc.ReplicationDriver 在用过Amoeba 和 Cobar,还有dbware 等读写分离组件后,今天我的一个好朋友跟我讲,MySQL自身的也是可以读写分离的,因为他们提供了一个新的驱动,...
突破Java面试(50)-MySQL读写分离及主从同步延时解决方案.docx
使用JAVA aop技术,实现mysql 数据库读写分离(密码:111111)
JAVA数据库读写分离项目源码(MYSQL),非常详细的注解,ssm框架开发,能使你快速掌握读写分离技术!!!
基于Mycat的MySQL主从读写分离配置详解与示例
我感觉很不错的技术文档,现在和大家分享,希望能够帮到大家,如果你需要可以下载看看,很适合喜欢研究技术的人员
mysql5.7 双主互备、高可用、读写分离 + keepalived 实战演练
关于mysql的读写分离架构有很多,百度的话几乎都是用mysql_proxy实现的。由于proxy是基于lua脚本语言实现的,所以网上不少网友表示proxy效率不高,也不稳定,不建议在生产环境使用; amoeba是阿里开发的一款数据库...
Amoeba搞定mysql主从读写分离
java mysql 读写分离demo mybatis作为数据库访问层,实现数据库读写分离的解决方案
分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,分享+备份,
mysql读写分离,分库分表-MysqlSample
https://mp.csdn.net/console/uploadResources?spm=1011.2124.3001.4171
springboot集成shardingJDBC实现读写分离demo工程,亲测可用 使用方式见博客:https://maoqizhi.blog.csdn.net/article/details/123149268?spm=1001.2014.3001.5502
基于 gin+gorm+redis+mysql 读写分离的电子商城源码.zip
基于 gin+gorm+redis+mysql 读写分离的心理咨询系统,包括 JWT 鉴权,CORS跨域,AES 对称加密,引入ELK体系,使用docker容器化部署。
Amoeba搞定mysql主从读写分离.pdf
mysql主从复制 的简单说明mysql主从复制 常见问题表述Mycat 读写分离 简单介绍
Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现读写分离