在 Spring Boot 中实现多数据源的配置和管理涉及到一些核心概念和步骤。以下是一个基本的多数据源配置示例,涉及到了主数据源和辅助数据源的配置。
1. 添加依赖:
首先,确保你的项目中添加了连接数据库的相关依赖,例如 MySQL 或其他数据库的 JDBC 驱动。
2. 配置数据源:
在 application.properties
或 application.yml
文件中配置主数据源和辅助数据源的连接信息:
# 主数据源配置
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primarydb
spring.datasource.primary.username=root
spring.datasource.primary.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 辅助数据源配置
spring.datasource.secondary.url=jdbc:mysql://localhost:3306/secondarydb
spring.datasource.secondary.username=root
spring.datasource.secondary.password=root
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver
3. 配置数据源 Bean:
创建两个不同的数据源 Bean,一个用于主数据源,另一个用于辅助数据源。同时,配置 JPA 的 EntityManagerFactory 和事务管理器。
@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource dataSourceSecondary() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.domain.primary") // 设置主数据源实体类所在的包
.persistenceUnit("primary")
.build();
}
@Bean(name = "entityManagerFactorySecondary")
public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(EntityManagerFactoryBuilder builder, @Qualifier("secondaryDataSource") DataSource dataSource) {
return builder
.dataSource(dataSource)
.packages("com.example.domain.secondary") // 设置辅助数据源实体类所在的包
.persistenceUnit("secondary")
.build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
@Bean(name = "transactionManagerSecondary")
public PlatformTransactionManager transactionManagerSecondary(@Qualifier("entityManagerFactorySecondary") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
4. 配置 Repository:
在实体类对应的包中创建两个不同的 Repository 接口,分别用于主数据源和辅助数据源。
// 主数据源 Repository
public interface UserRepository extends JpaRepository<User, Long> {
// Custom queries for primary data source
}
// 辅助数据源 Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
// Custom queries for secondary data source
}
5. 使用不同的数据源:
在服务类或控制器中使用 @Qualifier
注解指定要使用的数据源:
@Service
public class MyService {
@Autowired
@Qualifier("userRepository")
private UserRepository userRepository;
@Autowired
@Qualifier("productRepository")
private ProductRepository productRepository;
// Service methods
}
以上是一个基本的多数据源配置示例,实际应用中可能会有更复杂的需求,例如事务管理、多数据源切换策略等,这时需要根据具体情况进行更详细的配置和处理。
Was this helpful?
0 / 0