SpringBoot多数据源AbstractRoutingDataSource(二)
- 1.多数据源配置
- 2.多数据源调用流程
- 3.实现
1.多数据源配置
spring-jdbc
模块提供AbstractRoutingDataSource
,其内部可以包含了多个DataSource
, 然后在运行时来动态的访问数据库
2.多数据源调用流程
3.实现
@Component
@Primary
public class DynamicDataSource extends AbstractRoutingDataSource {
public static ThreadLocal<String> name=new ThreadLocal<>();
@Autowired
DataSource dataSource1;
@Autowired
DataSource dataSource2;
@Override
protected Object determineCurrentLookupKey() {
return name.get();
}
@Override
public void afterPropertiesSet() {
//targetDataSources初始化数据源
HashMap<Object, Object> targetDataSources = new HashMap<>();
targetDataSources.put("w", dataSource1);
targetDataSources.put("r", dataSource2);
super.setTargetDataSources(targetDataSources);
//为defaultTargetDataSource设置默认数据源
super.setDefaultTargetDataSource(dataSource1);
super.afterPropertiesSet();
}
}
相较于SpringBoot多数据源(一),这里直接继承了AbstractRoutingDataSource
,就不用再实现DataSource
中的方法,直接交给AbstractRoutingDataSource
去实现。