Spring Boot提供了一套比较完善的多数据源的自动化配置机制,比如这里,但它的缺点是无法应对数据源不确定的场景,即软件在真正交付使用之前不知道到底会配置多少数据源。所以我这里提供多数据源自动化配置的另一种实现方法。可以把数据源配置放在库里或者放在配置文件里,程序启动时会自动根据你配置的多少初始化为对应的连接池供程序使用。

实现思路

st=>start: 开始
op0=>operation: 创建单例模式类:>https://www.lefer.cn/posts/10448/
op1=>operation: 读取配置
op2=>operation: 循环初始化连接池
op3=>operation: 放入map中
op4=>operation: 对外提供获取方法
e=>end: 结束
st->op0(right)->op1(right)->op2(right)->op3(right)->op4->e

核心代码

初始化连接池

这里使用的是hikar作为连接池。dataSourceMap是存放连接池的map。

HikariConfig config = new HikariConfig();
config.setMaximumPoolSize(100);
config.setDriverClassName(dataSourceConfig.getDriverClassName());
config.setPoolName(dataSourceConfig.getName());
config.setJdbcUrl(dataSourceConfig.getUrl());
config.setUsername(dataSourceConfig.getUsername());
config.setPassword(dataSourceConfig.getPassword());
HikariDataSource dataSource = new HikariDataSource(config);
dataSourceMap.put(dataSourceConfig.getName(), dataSource);

提供JDBCTemplate供使用

public JdbcTemplate getJDBCTemplate(String dataSourceName) {
return new JdbcTemplate(this.dataSourceMap.get(dataSourceName));
}

END