SpringBoot @DS注解 和 DynamicDataSource自定义实现多数据源的2种实现方式
// 方案1:使用@DS注解
@DS("datasource1")
@Service
public class ServiceA {
// 方法内部使用注解指定的数据源
}
// 方案2:使用DynamicDataSource自定义实现
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
@Override
protected Object determineCurrentLookupKey() {
return contextHolder.get();
}
public static void setCurrentDataSource(String dataSourceType) {
contextHolder.set(dataSourceType);
}
public static String getCurrentDataSource() {
return contextHolder.get();
}
public static void clearCurrentDataSource() {
contextHolder.remove();
}
}
// 使用DynamicDataSource
@Service
public class ServiceB {
public void doSomething() {
try {
DynamicDataSource.setCurrentDataSource("datasource1");
// 执行操作
} finally {
DynamicDataSource.clearCurrentDataSource();
}
}
}
在这个例子中,方案1使用了@DS
注解来指定方法使用的数据源,而方案2通过自定义的DynamicDataSource
类来动态切换数据源。方案2提供了更加灵活的数据源切换方式,可以在代码中手动设置和清除当前的数据源。
评论已关闭