web项目中配置多个数据源

spring + mybatis 多数据源配置有两种解决方案

1、配置多个不同的数据源,使用一个sessionFactory,在业务逻辑使用的时候自动切换到不同的数据源,   有一个种是在拦截器里面根据不同的业务现切换到不同的datasource;

   有的会在业务层根据业务来自动切换。

2、在spring项目中配置多个不同的数据源datasource,配置多个sqlSessionFactory,每个sqlSessionFactory对应一个datasource      在dao 层根据不同业务自行选择使用哪个数据源的session来操作。

      使用请参考文章:http://blog.csdn.net/zhmz1326/article/details/52041918
 

(一)定义数据源名称常量

public class DataSourceType {
	
	public  static final String  SOURCE_MYSQL = "mysql_dataSource";
	
	public  static final String  SOURCE_POSTGS = "postgs_dataSource";

}

(二)创建负责切换数据源的类

public class DataSourceContextHolder {
	private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();  
	  
    public static void setDbType(String dbType) {  
           contextHolder.set(dbType);  
    }  
 
    public static String getDbType() {  
           return ((String) contextHolder.get());  
    }  
 
    public static void clearDbType() {  
           contextHolder.remove();  
    }  
}

(三) 建立动态数据源类,该类必须继承AbstractRoutingDataSource,且实现方法determineCurrentLookupKey

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

public class DynamicDataSource extends AbstractRoutingDataSource{

	@Override
	protected Object determineCurrentLookupKey() {
		return DataSourceContextHolder. getDbType();
	}

}

(四)配置xml

<!-- 配置mysql -->
	<bean id="mysql_dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/colleges" />
        <property name="username" value="root" />
        <property name="password" value="root" />
    </bean>
    
    <!-- 配置postgs -->
     <bean id="postgs_dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="org.postgresql.Driver" />
		<property name="url" value="jdbc:postgresql://114.215.83.3:5432/coges" />
		<property name="username" value="postgres" />
		<property name="password" value="postgres" />
	</bean>
	
	<!-- 配置动态数据源 -->
	 <bean id ="dataSource" class= "com.mote.dc.changedb.DynamicDataSource" >  
          <property name ="targetDataSources">  
                <map key-type ="java.lang.String">  
                      <entry value-ref ="postgs_dataSource" key= "postgs_dataSource"></entry >  
                      <entry value-ref ="mysql_dataSource" key= "mysql_dataSource"></entry >  
                </map >  
          </property>  
          <!-- 默认使用mysql -->  
          <property name ="defaultTargetDataSource" ref= "mysql_dataSource"></property >      
   </bean>

(五)当需要使用某个数据库的时候,使用下面一行代码进行切换

//切换数据库
DataSourceContextHolder.setDbType(DataSourceType.SOURCE_POSTGS);

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值