dynamic-datasource-spring-boot-starter 怎么手动初始化数据源
时间: 2023-07-09 22:45:13 浏览: 258
dynamic-datasource-spring-boot-starter-3.4.1-API文档-中英对照版.zip
5星 · 资源好评率100%
dynamic-datasource-spring-boot-starter 提供了两种手动初始化数据源的方式:
1. 使用 DataSourceBuilder 类手动创建数据源
你可以使用 DataSourceBuilder 类手动创建数据源,然后将它添加到动态数据源中。具体代码如下:
```java
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.master")
public DataSource masterDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.slave1")
public DataSource slave1DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.slave2")
public DataSource slave2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public DataSource dynamicDataSource(@Qualifier("masterDataSource") DataSource masterDataSource,
@Qualifier("slave1DataSource") DataSource slave1DataSource,
@Qualifier("slave2DataSource") DataSource slave2DataSource) {
DynamicRoutingDataSource dynamicRoutingDataSource = new DynamicRoutingDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>(3);
dataSourceMap.put(DataSourceKey.MASTER.name(), masterDataSource);
dataSourceMap.put(DataSourceKey.SLAVE1.name(), slave1DataSource);
dataSourceMap.put(DataSourceKey.SLAVE2.name(), slave2DataSource);
// Set master datasource as default
dynamicRoutingDataSource.setDefaultTargetDataSource(masterDataSource);
// Set slave datasource as target datasource
dynamicRoutingDataSource.setTargetDataSources(dataSourceMap);
// To put datasource keys into DataSourceContextHolder to judge if the datasource is exist
DynamicDataSourceContextHolder.dataSourceKeys.addAll(dataSourceMap.keySet());
return dynamicRoutingDataSource;
}
}
```
2. 手动添加数据源到动态数据源中
你也可以手动将已经创建好的数据源添加到动态数据源中。具体代码如下:
```java
@Autowired
private DynamicRoutingDataSource dynamicRoutingDataSource;
@Bean
public void addDataSource() {
DataSource dataSource = createDataSource();
dynamicRoutingDataSource.addDataSource("key", dataSource);
}
```
以上两种方式都是可以手动初始化数据源的,只需要根据具体的场景选择合适的方式即可。
阅读全文