springboot2.0 多数据源
时间: 2023-10-20 14:32:12 浏览: 94
在 Spring Boot 2.0 中配置多数据源可以通过以下步骤实现:
1. 添加相关依赖:在 `pom.xml` 文件中添加 Spring Boot 对多数据源的支持依赖,例如 `spring-boot-starter-data-jpa` 和 `mysql-connector-java`。
2. 配置数据源:在 `application.properties` 或 `application.yml` 文件中配置数据源信息。例如,定义两个数据源的配置:
```properties
# 第一个数据源
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=user1
spring.datasource.password=password1
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 第二个数据源
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2
spring.datasource.secondary.username=user2
spring.datasource.secondary.password=password2
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
```
3. 定义多数据源配置类:创建一个配置类,用于配置多个数据源和实体管理器工厂。可以使用 `@Configuration` 和 `@EnableJpaRepositories` 注解来自定义数据源配置。
```java
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository1", entityManagerFactoryRef = "entityManagerFactory1")
public class DataSource1Config {
// 配置第一个数据源的相关配置,例如 DataSource、EntityManagerFactory、TransactionManager 等
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
// ...
}
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository2", entityManagerFactoryRef = "entityManagerFactory2")
public class DataSource2Config {
// 配置第二个数据源的相关配置,例如 DataSource、EntityManagerFactory、TransactionManager 等
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
// ...
}
```
4. 配置实体管理器工厂:在每个数据源的配置类中,需要配置对应的实体管理器工厂。
```java
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository1", entityManagerFactoryRef = "entityManagerFactory1")
public class DataSource1Config {
// ...
@Bean(name = "entityManagerFactory1")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("dataSource1") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.entity1")
.build();
}
// ...
}
@Configuration
@EnableJpaRepositories(basePackages = "com.example.repository2", entityManagerFactoryRef = "entityManagerFactory2")
public class DataSource2Config {
// ...
@Bean(name = "entityManagerFactory2")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("dataSource2") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.entity2")
.build();
}
// ...
}
```
5. 使用多个数据源:在需要使用数据源的地方,可以通过 `@Qualifier` 注解指定要使用的数据源。
```java
@Service
public class MyService {
@Autowired
@Qualifier("entityManagerFactory1")
private EntityManagerFactory entityManagerFactory1;
@Autowired
@Qualifier("entityManagerFactory2")
private EntityManagerFactory entityManagerFactory2;
// ...
}
```
以上就是在 Spring Boot 2.0 中配置多数据源的基本步骤。需要注意配置类和数据源的命名,以及注解的使用。
阅读全文