<property name="driverClassName" value="${db.driver.class.name}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
<property name="initialSize" value="${db.initial.size}" />
<property name="maxIdle" value="${db.max.idle}" />
<property name="minIdle" value="${db.min.idle}" />
<property name="maxActive" value="${db.max.active}" />
<property name="removeAbandoned" value="${db.remove.abandoned}" />
<property name="removeAbandonedTimeout" value="${db.remove.abandoned.timeout}" />
<property name="maxWait" value="${db.max.wait}" />
<property name="validationQuery" value="${db.validation.query}" />
</bean>
<!-- 多数据源配置 -->
<bean id="mysql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver.class.name1}" />
<property name="url" value="${db.url1}" />
<property name="username" value="${db.username1}" />
<property name="password" value="${db.password1}" />
<property name="initialSize" value="${db.initial.size}" />
<property name="maxIdle" value="${db.max.idle}" />
<property name="minIdle" value="${db.min.idle}" />
<property name="maxActive" value="${db.max.active}" />
<property name="removeAbandoned" value="${db.remove.abandoned}" />
<property name="removeAbandonedTimeout" value="${db.remove.abandoned.timeout}" />
<property name="maxWait" value="${db.max.wait}" />
<property name="validationQuery" value="${db.validation.query}" />
</bean>
<bean id="dataSource" class="com.msuisoft.rbook.student.controller.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="oracle" value-ref="oracle" />
<entry key="mysql" value-ref="mysql" />
</map>
</property>
<property name="defaultTargetDataSource" ref="oracle" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref="dataSource" p:mapperLocations="/WEB-INF/orm/**/*.xml" />
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="com.msuisoft"
p:sqlSessionFactoryBeanName="sqlSessionFactory" />
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />
<!-- 拦截器方式配置事物 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="move*" propagation="REQUIRED" />
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="load*" read-only="true" />
<tx:method name="search*" read-only="true" />
</tx:attributes>
</tx:advice>
package com.msuisoft.rbook.student.controller;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource{
public static final String DATA_SOURCE_ORACLE = "oracle";
public static final String DATA_SOURCE_MYSQL = "mysql";
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setCustomerType(String customerType) {
contextHolder.set(customerType);
}
public static String getCustomerType() {
return contextHolder.get();
}
public static void clearCustomerType() {
contextHolder.remove();
}
@Override
protected Object determineCurrentLookupKey() {
return getCustomerType();
}
}
DynamicDataSource.setCustomerType(DynamicDataSource.DATA_SOURCE_MYSQL);