利用Spring的AbstractRoutingDataSource解决多数据源的问题
来源:互联网 发布:在中国的外国人 知乎 编辑:程序博客网 时间:2024/06/07 05:04
原址:点击打开链接
多数据源问题很常见,例如读写分离数据库配置。
原来的项目出现了新需求,局方要求新增某服务器用以提供某代码,涉及到多数据源的问题。
研究成果如下:
1、首先配置多个datasource
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">
- </property>
- <property name="url" value="jdbc:jtds:sqlserver://10.82.81.51:1433;databaseName=standards">
- </property>
- <property name="username" value="youguess"></property>
- <property name="password" value="youguess"></property>
- </bean>
- <bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver">
- </property>
- <property name="url" value="jdbc:jtds:sqlserver://10.82.81.52:1433;databaseName=standards">
- </property>
- <property name="username" value="youguess"></property>
- <property name="password" value="youguess"></property>
- </bean>
2、写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法
- package com.standard.core.util;
- import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
- public class DynamicDataSource extends AbstractRoutingDataSource {
- @Override
- protected Object determineCurrentLookupKey() {
- return CustomerContextHolder.getCustomerType();
- }
- }
3、利用ThreadLocal解决线程安全问题
- package com.standard.core.util;
- public class CustomerContextHolder {
- public static final String DATA_SOURCE_A = "dataSource";
- public static final String DATA_SOURCE_B = "dataSource2";
- private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
- public static void setCustomerType(String customerType) {
- contextHolder.set(customerType);
- }
- public static String getCustomerType() {
- return contextHolder.get();
- }
- public static void clearCustomerType() {
- contextHolder.remove();
- }
- }
4、数据源配置
- <bean id="dynamicDataSource" class="com.standard.core.util.DynamicDataSource" >
- <property name="targetDataSources">
- <map key-type="java.lang.String">
- <entry value-ref="dataSource" key="dataSource"></entry>
- <entry value-ref="dataSource2" key="dataSource2"></entry>
- </map>
- </property>
- <property name="defaultTargetDataSource" ref="dataSource" >
- </property>
- </bean>
5、在DAOImpl中切换数据源
- CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);
搞定!
0 0
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 利用Spring的AbstractRoutingDataSource来解决多数据源的问题,eg:数据库的读写分离
- spring 解决多数据源问题,主要的继承类为AbstractRoutingDataSource
- Spring 的AbstractRoutingDataSource实现多数据源
- spring的AbstractRoutingDataSource 多数据源切换
- flume-ng性能优化与架构设计
- C#—考题字符串2
- 由于不满目前CSDN的域名,现博客将搬迁重写
- 特斯拉、猎鹰9、海上回收、龙飞船、格洛航天公司、充气式太空舱、霍金、邮票航天器
- 快速打开当前窗口下的CMD窗口
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- Android通过PendingIntent实现消息通知
- Linux:sk_buff完全剖析与理解【转】
- 算法重要性
- hdu 1286 找新朋:(欧拉函数)
- lodash的2个数组对象操作
- 生成android的keystore文件有以下两种方法:
- ZOJ 3606Lazy Salesgirl
- spring websocket 利用注解接收和发送消息