在Spring Boot中配置多个数据源可以通过以下步骤来实现:
-
在pom.xml文件中添加Spring Boot对多数据源的支持依赖:
org.springframework.boot spring-boot-starter-data-jpa com.zaxxer HikariCP -
在application.properties或application.yml配置文件中配置每个数据源的连接信息:
# 数据源1 spring.datasource.url=jdbc:mysql://localhost:3306/db1 spring.datasource.username=root spring.datasource.password=root
数据源2
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2 spring.datasource.secondary.username=root spring.datasource.secondary.password=root
3. 创建多个DataSource bean,分别对应每个数据源:
```java
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
-
配置JpaVendorAdapter和EntityManagerFactory bean,指定每个数据源的JPA配置:
@Configuration @EnableJpaRepositories( basePackages = "com.example.repository", entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager" ) public class JpaConfig { @Autowired @Qualifier("dataSource") private DataSource dataSource; @Autowired @Qualifier("secondaryDataSource") private DataSource secondaryDataSource; @Primary @Bean(name = "entityManagerFactory") public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) { return builder .dataSource(dataSource) .packages("com.example.domain") .persistenceUnit("primary") .build(); } @Bean(name = "secondaryEntityManagerFactory") public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(EntityManagerFactoryBuilder builder) { return builder .dataSource(secondaryDataSource) .packages("com.example.domain") .persistenceUnit("secondary") .build(); } @Primary @Bean(name = "transactionManager") public PlatformTransactionManager transactionManager( @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory); } @Bean(name = "secondaryTransactionManager") public PlatformTransactionManager secondaryTransactionManager( @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory secondaryEntityManagerFactory) { return new JpaTransactionManager(secondaryEntityManagerFactory); } }
-
在需要使用数据源的地方使用
@Qualifier
注解指定具体的数据源:@Service public class MyService { @Autowired @Qualifier("entityManagerFactory") private EntityManagerFactory entityManagerFactory; // 使用entityManagerFactory进行数据库操作 }
通过以上步骤,就可以在Spring Boot中成功配置多个数据源。