Spring4 + Mybatis3 多数据源配置与调用举例

后端使用数据库提供服务时,遇到性能问题,有时会采用分库分表的方式(当然可以用ES集群代替传统DB)来降低单台服务器压力,提高整体吞吐量。而分库就会有多数据源的问题,下面举例说明下在Spring4 + MyBatis3的情况下,如何连接多个数据库。

1.配置数据库属性文件db.properties(针对dbcp连接池)

initialSize=20
maxActive=200
maxIdle=20
minIdle=1
maxWait=60000

data1.driver=com.mysql.jdbc.Driver
data1.url=jdbc:mysql://localhsot:3306/test
data1.username=test
data1.password=123456

data2.driver=com.mysql.jdbc.Driver
data2.url=jdbc:mysql://localhsot:3307/test
data2.username=test
data2.password=123456

2.Spring配置文件(重点dynamicDataSource,事务采用拦截器方式,并支持@Transcational注解方式)





    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    
    
        
            
                
                
                
            
        
        
        
    


    
    
        
        
        
    

    
    
        
        
        
    


    
    
        
    

    
    
    
    

    
    
        
            
            
            
            
            
            
        
    
    
        
        
    


  

3.实现DynamicDataSource类(需继承AbstractRoutingDataSource;使用ThreadLocal保存当前线程连接设置,解决多线程相互干扰问题)

package com.baidu.utils;

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

public class DynamicDataSource extends AbstractRoutingDataSource {
    private static final ThreadLocal dataSourceKey = new InheritableThreadLocal();

    public static void setDataSourceKey(String dataSource) {
        dataSourceKey.set(dataSource);
    }

    @Override
    protected Object determineCurrentLookupKey() {
        return dataSourceKey.get();
    }
}

4.调用示例

    @Autowired
    InvestorMapper investorMapper;
    
    public List queryInvestors(String epId) throws Exception {
        /* 如果用dataSource1,则不需要调用setDataSource */
        DynamicDataSource.setDataSource("dataSource2");
        return investorMapper.queryInvestorsByEpId(epId);
    }

你可能感兴趣的:(Spring4 + Mybatis3 多数据源配置与调用举例)