最近项目中使用了数据库分库,所以用到了用到了数据源切换。写了一个简单的demo,供参考。
数据源切换的原理,采用的spring的aop和AbstractRoutingDataSource。
RoutingDataSource.java
DataSourceHolder.java
DAOAdvice.java
说明:RoutingDataSource类通过<bean id="dataSource" class="org.pay.common.RoutingDataSource"> 注入,在DAOAdvice类中设置的datasource的key来获得哪个数据源,DAOAdvice类根据
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* org.pay.dao..*.*(..))"
advice-ref="daoAdvice" order="100"/>
这个切面判断dao所在的package来判断使用哪个数据源将其设置到上下文根中(DataSourceHolder),
例如当org.pay.dao中的dao被调用时,取到的是dataSourceTest这个数据源