1.1.DataSourceContextHolder(数据库切换工具类)
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();
}
}
1.2.DynamicDataSource(基本类)
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
return null;
}
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDbType();
}
}
1.3.DataSourceType(数据库类型常量类)
public class DataSourceType {
// 192.168.10.72:3307/100msh_admin
public static final String SOURCE_ADMIN = "ds_admin";
// 192.168.10.72:3308/100msh_partner
public static final String SOURCE_PARTNER = "ds_partner";
// 192.168.10.72:3309/100msh_mop
public static final String SOURCE_MOP = "ds_mop";
}
1.4.配置文件XML
<!-- 多数据源配置 -->
<bean id="ds_admin" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/cpdata"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="ds_partner" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/cpzdy"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<bean id="ds_mop" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://192.168.10.72:3309/100msh_mop"></property>
<property name="username" value="root"></property> <property name="password"
value="root"></property> </bean>
<!-- 动态配置数据源 -->
<bean id="dataSource" class="com.baimi.routerweb.datasource.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="ds_admin" key="ds_admin"></entry>
<entry value-ref="ds_partner" key="ds_partner"></entry>
<entry value-ref="ds_mop" key="ds_mop"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="ds_admin"></property> <!-- 默认使用ds1的数据源 -->
</bean>