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);