Spring boot 动态数据源连接N个数据库
时间: 2024-05-16 13:15:09 浏览: 147
Spring Boot 动态数据源文檔
Spring Boot支持使用多个数据源,可以通过配置多个数据源,以及配置动态数据源来实现连接N个数据库。
首先,需要在项目中引入多数据源的依赖,例如Druid或HikariCP。
然后,在配置文件中配置多个数据源的信息,如下所示:
```
spring.datasource.primary.url=jdbc:mysql://localhost:3306/db1
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
```
在配置文件中还需要配置动态数据源,如下所示:
```
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.dynamic.primary=primary
spring.datasource.dynamic.secondary=secondary
spring.datasource.dynamic.datasource-names=primary,secondary
```
这样就可以实现动态数据源的配置。在代码中,可以使用`@Primary`和`@Qualifier`注解来指定默认数据源和特定的数据源。
例如:
```
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().type(HikariDataSource.class).build();
}
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource(@Qualifier("primaryDataSource") DataSource primaryDataSource,
@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
Map<Object, Object> dataSourceMap = new HashMap<>();
dataSourceMap.put("primary", primaryDataSource);
dataSourceMap.put("secondary", secondaryDataSource);
dynamicDataSource.setTargetDataSources(dataSourceMap);
dynamicDataSource.setDefaultTargetDataSource(primaryDataSource);
return dynamicDataSource;
}
```
在使用时,可以通过`@Autowired`注解注入动态数据源,并使用`@Qualifier`注解指定特定的数据源,例如:
```
@Autowired
@Qualifier("dynamicDataSource")
private DataSource dataSource;
```
阅读全文