spring mvc 配置DataSource以及动态数据源

      spring mvc 配置DataSource以及动态数据源

1.DateSource的配置
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源

applicationContext.xml 中context:property-placeholder配置
即可,这里location值为参数配置文件的位置,参数配置文件通常放在src目录下,而参数配置文件的格式跟java通用的参数配置文件相同,即键值对的形式,例如:
 jdbc.properties文件的内容
test.jdbc.driverClassName=com.mysql.jdbc.Driver  
test.jdbc.url=jdbc:mysql://localhost:3306/test  
test.jdbc.username=root  
test.jdbc.password=root 
这样一来就可以为spring配置的bean的属性设置值了,比如spring有一个jdbc数据源的类DriverManagerDataSource 
在配置文件里这么定义bean: 
  
      
      
      
      
  

2.动态数据源
多数据源问题很常见,例如读写分离数据库配置。

我们很多项目中业务都需要涉及到多个数据源,最简单的做法就是直接在java代码里面lookup需要的数据源,但是这样的做法很明显耦合度太高了,

而且当逻辑流程不够严谨的时候就会出现各种大家不愿意看到的问题,由于我们现在的大多项目已经离不开spring了,spring也提供各种强大的功能,

很明显这种动态数据源功能也包括在内,具体实现类请看org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource


1)首先配置多个datasource
  
          
          
          
          
          
          
      
      
          
          
          
          
          
          
  

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 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();  
    }  
}
4) 数据源 配置
  
          
              
                  
                  
              
          
          
          
     

5) 在DAOImpl中切换数据源
CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B); 






  

你可能感兴趣的:(spring,mvc,mybatis)