spring 配置多数据源

14 篇文章 0 订阅
配置application.xml的dataSource:
   <bean id= "aTestDataSource" 
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource"
   <property name= "driverClassName" value= "com.mysql.jdbc.Driver" /> 
   <property name= "url" value= "jdbc:mysql://Ip:3306/tms_db?useUnicode=true&amp;characterEncoding=UTF-8" /> 
   <property name= "username" value= "**" /> 
   <property name= "password" value= "**" /> 
  </bean>
     <bean id= "bTestDataSource" 
   class = "org.springframework.jdbc.datasource.DriverManagerDataSource"
   <property name= "driverClassName" value= "com.microsoft.jdbc.sqlserver.SQLServerDriver" /> 
   <property name= "url" value= "jdbc:microsoft:sqlserver://Ip:1433;DatabaseName=***" /> 
   <property name= "username" value= "**" /> 
   <property name= "password" value= "*****" /> 
  </bean>
     <bean id= "dataSource" class = "util.DynamicDataSource" >
         <property name= "targetDataSources" >
             <map key-type= "java.lang.String" >
             <entry key= "aTestDataSource" value-ref= "aTestDataSource" />
             <entry key= "bTestDataSource" value-ref= "bTestDataSource" />
             </map>
         </property>
     <property name= "defaultTargetDataSource" ref= "aTestDataSource" />
     </bean>

2. [代码]配置DynamicDataSource 和DbContextHolder     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public class DynamicDataSource extends AbstractRoutingDataSource {
 
     @Override
     protected Object determineCurrentLookupKey() {
         // TODO Auto-generated method stub
         return DbContextHolder.getDbType(); 
     }
 
     public <T> T unwrap(Class<T> iface) throws SQLException {
         // TODO Auto-generated method stub
         return null ;
     }
 
     public boolean isWrapperFor(Class<?> iface) throws SQLException {
         // TODO Auto-generated method stub
         return false ;
     }
 
}
 
 
 
public class DbContextHolder {
         private static final ThreadLocal contextHolder = new ThreadLocal();   
         
         public static void setDbType(String dbType)
         {   
             contextHolder.set(dbType);  
         }   
         
         
         public static String getDbType()
         {   
             String str=(String) contextHolder.get();
             if ( null ==str || "" .equals(str))
                 str= "1" ;
             return str;  
         }   
         
         public static void clearDbType()
         {   
             contextHolder.remove();  
        
}

3. [代码]在contorller内切换数据源     

?
1
2
3
4
5
6
DbContextHolder.setDbType( "bTestDataSource" ); //此处切换数据源
System.out.println(DbContextHolder.getDbType());
List list = orderService.***();
DbContextHolder.setDbType( "aTestDataSource" ); //切换回来默认的数据源
System.out.println(DbContextHolder.getDbType());
注:此处最好使用spring aop切入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值