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>