1、/*** 用于持有当前线程中使用的数据源标识* */public class DynamicDataSourceHolder { private static final ThreadLocal<String> THREAD_DATA_SOURCE = new ThreadLocal<String>(); public static String getDataSource() { return THREAD_DATA_SOURCE.get(); }
2、public static void setDataSource(String dataSource) {THREAD_DATA_SOURCE.set(dataSource);}public static void clearDataSource() {THREAD_DATA_SOURCE.remove();}
3、spring对多数据源的支持 ,重写determineCurrentLookupKey()方法,建立动态数据源类
4、public class DynamicDataSource extends AbstractRoutingDataSource { @Overrideprotected Object determineCurrentLookupKey() {return DynamicDataSourceHolder.getDataSource();}}
5、<!-- 引入多数据源 --> <bean id="挢旗扦渌;multiDataSource"稆糨孝汶; class="com.tydic.upp.systemmanage.datasource.util.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <!-- 指定lookupKey和与之对应的数据源 --> <entry key="readServerDataSource" value-ref="mysqlDataSource"></entry>
6、<entry key="readwriteServerDataSource" value-ref="dataSource"媪青怍牙></entry></map></property><!-- 这里可以指定默认的数据源 --><property name="defaultTargetDataSource" ref="dataSource"/></bean>
7、使用层面,直接切换,做好放到一个trycatchfinally中方式切换的数据源再切换回去。DynamicDataSourceHolder.setDataSource("");