springboot怎么配置多个数据源并连接
时间: 2024-01-30 19:04:02 浏览: 77
1. 添加多个数据源配置文件
在 `src/main/resources` 目录下新建一个 `application-xxx.yml` 文件,其中 `xxx` 用于区分不同的数据源配置。例如,如果你要配置一个名为 `primary` 的数据源和一个名为 `secondary` 的数据源,那么你需要创建两个配置文件:
application-primary.yml:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/primary_db
username: root
password: root
```
application-secondary.yml:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/secondary_db
username: root
password: root
```
2. 配置数据源
在 `application.yml` 文件中配置数据源相关的信息,包括默认数据源和其他数据源的信息。例如:
```yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/primary_db
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
# 配置其他数据源
primary:
url: jdbc:mysql://localhost:3306/primary_db
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
secondary:
url: jdbc:mysql://localhost:3306/secondary_db
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
```
3. 创建数据源
在 `@Configuration` 注解的类中创建数据源。使用 `@Primary` 注解标注默认数据源,其他数据源使用一个独立的方法创建。例如:
```java
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
```
4. 配置 JdbcTemplate
在 `@Configuration` 注解的类中配置 `JdbcTemplate`。使用 `@Qualifier` 注解指定数据源。例如:
```java
@Configuration
public class JdbcTemplateConfig {
@Primary
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate(@Qualifier("dataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
```
5. 使用 JdbcTemplate
在需要使用 JdbcTemplate 的地方,使用 `@Autowired` 注解注入 JdbcTemplate。使用 `@Qualifier` 注解指定数据源。例如:
```java
@Service
public class UserService {
@Autowired
@Qualifier("primaryJdbcTemplate")
private JdbcTemplate primaryJdbcTemplate;
@Autowired
@Qualifier("secondaryJdbcTemplate")
private JdbcTemplate secondaryJdbcTemplate;
public List<User> getAllUsersFromPrimary() {
return primaryJdbcTemplate.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class));
}
public List<User> getAllUsersFromSecondary() {
return secondaryJdbcTemplate.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class));
}
}
```
阅读全文