首页 > 其他 > 详细

Spring多数据源的动态切换

时间:2014-02-18 15:55:24      阅读:343      评论:0      收藏:0      [点我收藏+]

Spring多数据源的动态切换  

目前很多项目中只能配置单个数据源,那么如果有多个数据源肿么办?Spring提供了一个抽象类AbstractRoutingDataSource,为我们很方便的解决了这个问题。
1.写一个DynamicDataSource类继承AbstractRoutingDataSource,并实现determineCurrentLookupKey方法

bubuko.com,布布扣
public class DynamicDataSource extends AbstractRoutingDataSource{
 private final static Logger  logger  = LoggerFactory.getLogger("DynamicDataSource");   
 
    @Override  
    protected Object determineCurrentLookupKey() {   
        return DbContextHolder.getDbType();   
    }   
}
bubuko.com,布布扣

2.写一个线程安全的ThreadLocal

bubuko.com,布布扣
public class DbContextHolder {
 private static final ThreadLocal contextHolder = new ThreadLocal();   
   
    public static void setDbType(String dbType) {   
        contextHolder.set(dbType);   
    }   
  
    public static String getDbType() {   
        return (String) contextHolder.get();   
    }   
  
    public static void clearDbType() {   
        contextHolder.remove();   
    }   
}
bubuko.com,布布扣

3.dataSource的配置

bubuko.com,布布扣
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3 xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 5 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
 6 default-autowire="byName">
 7 
 8 <bean id="aTestDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
 9 <property name="driverClassName" value="${a.jdbc.driverClassName}" />
10 <property name="url" value="${a.jdbc.url}" />
11 <property name="username" value="${a.jdbc.username}" />
12 <property name="password" value="${a.jdbc.password}" />
13 </bean>
14 
15 <bean id="bTestDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
16 <property name="driverClassName" value="${b.jdbc.driverClassName}" />
17 <property name="url" value="${gott.jdbc.url}" />
18 <property name="username" value="${b.jdbc.username}" />
19 <property name="password" value="${b.jdbc.password}" />
20 </bean>
21 
22 <bean id="dataSource" class="***.DynamicDataSource">
23 <property name="targetDataSources">
24 <map key-type="java.lang.String">
25 <entry key="aTestDataSource" value-ref="aTestDataSource" />
26 <entry key="bTestDataSource" value-ref="bTestDataSource" />
27 </map>
28 </property>
29 <property name="aTestDataSource" ref="aTestDataSource" />
30 </bean>
31 </beans>
bubuko.com,布布扣

4.当需要切换数据源时,只要调用一行代码就可以了

bubuko.com,布布扣
DbContextHolder.setDbType("aTestDataSource");
bubuko.com,布布扣

当然有兴趣的朋友也可以用aop去自动切换数据源

转自:http://blog.163.com/wang_hj138@126/blog/static/140800106201263151242338/

 参考:SSH配置多个数据源---http://zhoujingxian.iteye.com/blog/883642

Spring多数据源的动态切换

原文:http://www.cnblogs.com/yaowukonga/p/3553880.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!