zhaowenxuan
2025-02-07 1e3a838de89a277b2bc65761c0e5619a96a64813
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.ltkj.web.db;
 
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
 
public class DynamicDataSource extends AbstractRoutingDataSource {
 
    private final Map<Object, Object> targetDataSources = new HashMap<>(); // 存储所有数据源
 
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDataSourceKey(); // 根据上下文获取当前数据源的键
    }
 
    // 添加目标数据源
    public void addTargetDataSource(String key, DataSource dataSource) {
        targetDataSources.put(key, dataSource);
        super.setTargetDataSources(targetDataSources); // 更新目标数据源
        super.afterPropertiesSet(); // 重新初始化数据源
    }
 
    // 允许外部访问所有目标数据源
    @Override
    public void setTargetDataSources(Map<Object, Object> targetDataSources) {
        super.setTargetDataSources(targetDataSources);
    }
 
    public Map<Object, Object> getTargetDataSources() {
        return targetDataSources; // 获取所有目标数据源
    }
}