配置默认数据源和动态数据源
配置DynamicDataSource,重写determineCurrentLookupKey方法(重要),通过他来找到dataSourceMap中对应数据源
DataSourceUtil充当DynamicDataSourceContextHolder,通过setDataSourceKey方法切换数据源,通过addDataSource添加数据源
@Component
public class DataSourceUtil {
@Autowired
DynamicDataSource dynamicDataSource;
private final ThreadLocal<String> contextHolder = ThreadLocal.withInitial(() -> "defaultDataSource");
/**
* 切换数据源
* @param key
*/
public void setDataSourceKey(String key) {
contextHolder.set(key);
dynamicDataSource.afterPropertiesSet();
}
/**
* 获取当前数据源
* @return
*/
public String getDataSourceKey() {
return contextHolder.get();
}
/**
* 切换到默认数据源
*/
public void clearDataSourceKey() {
contextHolder.remove();
}
/**
* 根据租户ID设置数据源
* @param tenantId
* @return
*/
public void addDataSource(String tenantId, DataSource dataSource) {
// 没有数据源时添加数据源,有数据源直接使用
if (!dynamicDataSource.isExistDataSource(tenantId)) {
// 新增数据源
dynamicDataSource.addDataSource(tenantId, dataSource);
}
// 切换数据源
setDataSourceKey(tenantId);
dynamicDataSource.afterPropertiesSet();
}
}
通过setDataSourceKey切换到默认数据源
通过setDataSourceKey切换到对应的数据源