SpringBoot+AbstractRoutingDataSource实现多数据源以及事务处理
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import javax.sql.DataSource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class MultipleDataSource extends AbstractRoutingDataSource {
private final Map<Object, Object> dataSourceMap = new ConcurrentHashMap<>();
@Override
protected Object determineCurrentLookupKey() {
// DynamicDataSourceContextHolder为自定义类,提供数据源的获取和设置方法
return DynamicDataSourceContextHolder.getDataSourceType();
}
public void addDataSource(String key, DataSource dataSource) {
dataSourceMap.put(key, dataSource);
this.setTargetDataSources(dataSourceMap); // 设置数据源
this.afterPropertiesSet(); // 必须调用,以初始化AbstractRoutingDataSource
}
public DataSource getDataSource(String key) {
return dataSourceMap.get(key);
}
}
这段代码定义了一个MultipleDataSource
类,它继承自AbstractRoutingDataSource
。在determineCurrentLookupKey
方法中,它使用DynamicDataSourceContextHolder
来决定当前应该使用哪个数据源。addDataSource
方法允许动态添加数据源,getDataSource
方法用于获取指定的数据源。这个类可以用于实现多数据源的动态路由及其事务管理。
评论已关闭