java如何切换数据源
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 {
@Override
protected 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、使用层面,直接切换,做好放到一个try catch finally中方式切换的数据源再切换回去。
DynamicDataSourceHolder.setDataSource("");