【SpringBoot整合系列】SpringBoot配置多数据源
在Spring Boot中整合多数据源,通常需要以下步骤:
- 配置多个数据源。
- 创建对应的
EntityManagerFactory
和TransactionManager
。 - 配置
@Configuration
类来区分不同的数据源。
以下是一个简单的示例,演示如何配置两个数据源:
@Configuration
public class DataSourceConfig {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(primaryDataSource())
.packages("com.example.model.primary") // 设置实体类所在位置
.persistenceUnit("primary")
.build();
}
@Bean
public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
EntityManagerFactoryBuilder builder) {
return builder
.dataSource(secondaryDataSource())
.packages("com.example.model.secondary") // 设置实体类所在位置
.persistenceUnit("secondary")
.build();
}
@Bean
public PlatformTransactionManager primaryTransactionManager(
@Qualifier("primaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
@Bean
public PlatformTransactionManager secondaryTransactionManager(
@Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
在application.properties
或application.yml
中配置数据源:
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db
spring.datasource.primary.username=root
spring.datasource.primary.password=pass
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondary_db
spring.datasource.secondary.username=root
spring.datasource.secondary.password=pass
在实体类和Repository接口中,使用@PersistenceContext
注解指定实体管理器,或者在@Transactional
注解中通过value
属性指定事务管理器。
@Repository
public class PrimaryRepository {
@PersistenceContext(unitName = "primary")
private EntityManager
评论已关闭