多数据源配置3
- 动态数据源决策
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
String datasource = DataSourceContextHolder.getDbSource();
System.out.println("使用数据源 {" + datasource + "}");
return datasource;
}
}
- 动态数据源设置、获取
public class DataSourceContextHolder {
//实际上就是开启多个线程,每个线程进行初始化一个数据源
private static final ThreadLocal contextHolder = new ThreadLocal<>();
/**
* 设置数据源
* @param dbSourceEnum 枚举
*/
public static void setDbSource(DbSourceEnum dbSourceEnum) {
contextHolder.set(dbSourceEnum.getKey());
}
/**
* 取得当前数据源
* @return
*/
public static String getDbSource() {
return (String) contextHolder.get();
}
/**
* 清除上下文数据
*/
public static void clearDbSource() {
contextHolder.remove();
}
}