MyBatis 配置多数据源实现多个数据库动态切换

1.配置properties路径

我的配置文件

MyBatis 配置多数据源实现多个数据库动态切换_第1张图片

 

2.配置mybatis数据源

MyBatis 配置多数据源实现多个数据库动态切换_第2张图片

配置 第二套数据源

MyBatis 配置多数据源实现多个数据库动态切换_第3张图片

3 动态数据源的配置

MyBatis 配置多数据源实现多个数据库动态切换_第4张图片

两个key分别引入了 两套数据源,默认使用jsdx_telecom

4.配置SqlSessionFactory对象

MyBatis 配置多数据源实现多个数据库动态切换_第5张图片

5.配置事物管理器,要扫描的basePackage接口 

MyBatis 配置多数据源实现多个数据库动态切换_第6张图片

6.创建一个类取名为DynamicDataSource 继承AbstractRoutingDataSource

MyBatis 配置多数据源实现多个数据库动态切换_第7张图片

7  CustomerContextHolder类

 

MyBatis 配置多数据源实现多个数据库动态切换_第8张图片

使用方法:只需要在service层调用CustomerContextHolder方法的setCustomerType方法,传入要使用的数据源就好了。

MyBatis 配置多数据源实现多个数据库动态切换_第9张图片

 

PS:在这里有一个坑 我的两套数据源都是用的一个连接上的两个不同的数据库。所以数据源2的账号密码和数据源1的使用的是相同的prop字段,我试过使用不同的字段,很遗憾报错了。如果是两个不同的数据库应该不会存在这个问题 下边附完整的配置和java代码

 




    Spring公共配置 

    
    
        
        
    


    
    
        
        
        
        
        

        
        
        
        
        
    

    
    
        
        
        
        
        

        
        
        
        
        
    

    
    
        
            
                
                
            
        
        
        
    

    
    
        
        
        
        
        
        
        
        
            
                true
            
        

    

    
    
        
        
    

    
    
        
        
    

    
    

      
      
      
    

    
    
       
       
    








    
    
        
    

    
    
        
    

 

java代码

 

package com.overcloud.pay.common;

public class CustomerContextHolder {
    public static final String DATASOURCE_TELECOM = "jsdx_telecom";
    public static final String DATASOURCE_URL = "jsdx_url";

    public static final ThreadLocal contextHolder = new ThreadLocal();

    public static void setCustomerType(String customerType) {
        contextHolder.set(customerType);
    }

    public static String getCustomerType() {
        return contextHolder.get();
    }

    public static void clearCustomerType() {
        contextHolder.remove();
    }

}

 

package com.overcloud.pay.common;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        System.out.println(CustomerContextHolder.getCustomerType());
        return CustomerContextHolder.getCustomerType();
    }
}
 

 

 

 

 

你可能感兴趣的:(mysql,java)