阅读量:0
在Spring Boot中配置多个数据源可以通过以下步骤来实现:
- 在pom.xml文件中添加Spring Boot对多数据源的支持依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency>
- 在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
- 创建多个DataSource bean,分别对应每个数据源:
@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中成功配置多个数据源。