SprungBoot配置多数据源
时间: 2024-05-03 11:03:39 浏览: 77
在Spring Boot中配置多数据源可以使用Spring Data JPA的方式来实现。下面是一个简单的示例,假设我们有两个数据源,一个是MySQL数据库,另一个是PostgreSQL数据库。
首先需要在pom.xml中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgresql.version}</version>
</dependency>
```
其中${mysql.version}和${postgresql.version}需要根据实际情况进行替换。
接着在application.properties中添加以下配置:
```
# MySQL datasource
spring.datasource.url=jdbc:mysql://localhost:3306/db1
spring.datasource.username=user1
spring.datasource.password=password1
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# PostgreSQL datasource
spring.datasource.secondary.url=jdbc:postgresql://localhost:5432/db2
spring.datasource.secondary.username=user2
spring.datasource.secondary.password=password2
spring.datasource.secondary.driver-class-name=org.postgresql.Driver
```
其中,spring.datasource是MySQL数据库的配置,spring.datasource.secondary是PostgreSQL数据库的配置。
然后,需要在代码中配置两个数据源。可以使用@Primary注解指定默认数据源,使用@Qualifier注解指定要使用的数据源。例如:
```java
@Configuration
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactory",
basePackages = {"com.example.demo1.repository"})
public class MySQLConfig {
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("dataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.demo1.entity")
.persistenceUnit("db1")
.build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
@Configuration
@EnableJpaRepositories(
entityManagerFactoryRef = "secondaryEntityManagerFactory",
transactionManagerRef = "secondaryTransactionManager",
basePackages = {"com.example.demo2.repository"})
public class PostgreSQLConfig {
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("secondaryDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.demo2.entity")
.persistenceUnit("db2")
.build();
}
@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager secondaryTransactionManager(
@Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
```
其中,MySQLConfig配置了MySQL数据库的相关信息,PostgreSQLConfig配置了PostgreSQL数据库的相关信息。@Primary注解用于指定MySQL数据库是默认的数据源,@Qualifier注解用于指定要使用的数据源。
最后,在代码中使用@PersistenceContext注解注入EntityManager即可。
```java
@Service
public class UserService {
@PersistenceContext(unitName = "db1")
private EntityManager entityManager;
@PersistenceContext(unitName = "db2")
private EntityManager secondaryEntityManager;
// ...
}
```
这样就配置了两个数据源,可以在代码中使用不同的EntityManager来操作不同的数据库。
阅读全文