详解利用春天的AbstractRoutingDataSource解决多数据源的问题

  

多数据源问题很常见,例如读写分离数据库配置。

  

原来的项目出现了新需求,局方要求新增某服务器用以提供某代码,涉及到多数据源的问题。

  

研究成果如下:

  

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解决多数据源的问题