多数据源问题很常见,例如读写分离数据库配置。
原来的项目出现了新需求,局方要求新增某服务器用以提供某代码,涉及到多数据源的问题。
研究成果如下:
1,首先配置多个数据源
& lt; bean id=笆菰础崩?皁rg.apache.commons.dbcp.BasicDataSource”比; & lt;属性名=" driverClassName " value=" https://www.yisu.com/zixun/net.sourceforge.jtds.jdbc.Driver "比; & lt;/property> & lt;属性名=" url " value=" https://www.yisu.com/zixun/jdbc: jtds::状态"置疑"//10.82.81.51:1433;数据库名=标准”在 & lt;/property> & lt;属性名="用户名" value=" https://www.yisu.com/zixun/youguess "祝辞& lt;/property> & lt;属性名="密码" value=" https://www.yisu.com/zixun/youguess "祝辞& lt;/property> & lt;/bean> & lt; bean id=癲ataSource2”类=皁rg.apache.commons.dbcp.BasicDataSource”比; & lt;属性名=" driverClassName " value=" https://www.yisu.com/zixun/net.sourceforge.jtds.jdbc.Driver "比; & lt;/property> & lt;属性名=" url " value=" https://www.yisu.com/zixun/jdbc: jtds::状态"置疑"//10.82.81.52:1433;数据库名=标准”在 & lt;/property> & lt;属性名="用户名" value=" https://www.yisu.com/zixun/youguess "祝辞& lt;/property> & lt;属性名="密码" value=" https://www.yisu.com/zixun/youguess "祝辞& lt;/property> & lt;/bean>>之前2,写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法
包com.standard.core.util; 进口org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; 公开课DynamicDataSource延伸AbstractRoutingDataSource { @Override 保护对象determineCurrentLookupKey () { 返回CustomerContextHolder.getCustomerType (); } }3,利用ThreadLocal解决线程安全问题
包com.standard.core.util; 公开课CustomerContextHolder { 公共静态最终字符串DATA_SOURCE_A=笆菰础? 公共静态最终字符串DATA_SOURCE_B=癲ataSource2”; 私有静态最终ThreadLocalcontextHolder=new ThreadLocal (); 公共静态孔隙setCustomerType(字符串customerType) { contextHolder.set (customerType); } 公共静态字符串getCustomerType () { 返回contextHolder.get (); } 公共静态孔隙clearCustomerType () { contextHolder.remove (); } } 4,数据源配置
& lt; bean id=癲ynamicDataSource”类=" com.standard.core.util。祝辞DynamicDataSource”; & lt;属性名=皌argetDataSources”比; & lt;映射键式="以"比; & lt;入口value-ref=笆菰础奔?笆菰础弊4? lt;/entry> & lt;入口value-ref=癲ataSource2”键=癲ataSource2祝辞& lt;/entry> & lt;/map> & lt;/property> & lt;属性名=" defaultTargetDataSource " ref=笆菰础北? & lt;/property> & lt;/bean>>之前, 5日在DAOImpl中切换数据源
代码如下:
CustomerContextHolder.setCustomerType (CustomerContextHolder.DATA_SOURCE_B);,,
搞定!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
详解利用春天的AbstractRoutingDataSource解决多数据源的问题