简介
多数据源切换–Spring
代码地址
配置多数据源
-
添加测试数据
-
配置properties
cpool.initialPoolSize=20 cpool.minPoolSize=20 cpool.maxPoolSize=200 cpool.acquireIncrement=20 cpool.maxStatements=100 cpool.idleConnectionTestPeriod=120 jdbc.driver=com.mysql.jdbc.Driver #数据库01 jdbc.master.url=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8 jdbc.master.username=root jdbc.master.password=123456 #数据库02 jdbc.slave.url=jdbc:mysql://localhost:3306/test02?useUnicode=true&characterEncoding=utf-8 jdbc.slave.username=root jdbc.slave.password=123456
-
配置两个数据源
-
配置数据源的切换获取类
DbContextHolder
-
扩展Spring的
AbstractRoutingDataSource
抽象类,实现动态数据源。 -
配置多数据源
-
使用动态数据源
例子中DynamicDataSource是继承与AbstractRoutingDataSource,而AbstractRoutingDataSource又是继承于org.springframework.jdbc.datasource.AbstractDataSource,AbstractDataSource实现了统一的DataSource接口,所以DynamicDataSource同样可以当一个DataSource使用。
在Spring的JdbcTemplate使用动态数据源的配置示例
此处报红是应为dao中没有写setter方法
在ORM框架Hibernate中的使用配置示例:
-
事务管理
使用动态数据源的时候,可以看出和使用单数据源的时候相比,在使用配置上几乎没有差别,在进行性事务管理配置的时候也没有差别
使用Spring的JdbcTemplate的事务管理配置示例
使用Hibernate时的事务管理配置示例
-
动态数据源的管理控制
手动控制:
AOP的控制方式:
hibernateSessionFactory方式:
总结
通过扩展Spring的AbstractRoutingDataSource可以很好的实现多数据源的rout效果,而且对扩展更多的数据源有良好的伸缩性,只要增加数据源和修改DynamicDataSource的targetDataSources属性配置就好。在数据源选择控制上,可以采用手动控制(业务逻辑并不多的时候),也可以很好的用AOP的@Aspect在Service的入口加入一个切面@Pointcut,在@Before里判断JoinPoint的类容选定特定的数据源。