提示信息

Spring Boot 整合多数据源配置实现

醉了累了 已关注

在 Spring Boot 中整合多数据源可以通过配置多个 DataSource bean 来实现。下面是一个基本的实现步骤:

步骤 1:添加依赖

首先,你需要在 pom.xml 文件中添加 Spring Boot 和数据库相关的依赖。例如,如果你使用的是 MySQL 和 H2 数据库,你可以添加以下依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>mysql</groupId>
  7. <artifactId>mysql-connector-java</artifactId>
  8. <scope>runtime</scope>
  9. </dependency>
  10. <dependency>
  11. <groupId>com.h2database</groupId>
  12. <artifactId>h2</artifactId>
  13. <scope>runtime</scope>
  14. </dependency>

步骤 2:配置数据源

application.propertiesapplication.yml 中配置不同的数据源。例如:

  1. # Primary DataSource (e.g., MySQL)
  2. spring.datasource.primary.url=jdbc:mysql://localhost:3306/primarydb
  3. spring.datasource.primary.username=root
  4. spring.datasource.primary.password=yourpassword
  5. spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
  6. # Secondary DataSource (e.g., H2)
  7. spring.datasource.secondary.url=jdbc:h2:mem:secondarydb
  8. spring.datasource.secondary.driver-class-name=org.h2.Driver
  9. spring.datasource.secondary.username=sa
  10. spring.datasource.secondary.password=password

步骤 3:定义配置类

为每个数据源定义一个配置类,并标记相应的配置。使用 @Primary 注解来表示哪个数据源是主要的。

  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(
  4. basePackages = "com.example.primary.repository",
  5. entityManagerFactoryRef = "primaryEntityManagerFactory",
  6. transactionManagerRef = "primaryTransactionManager"
  7. )
  8. public class PrimaryDataSourceConfig {
  9. @Primary
  10. @Bean(name = "primaryDataSource")
  11. @ConfigurationProperties(prefix = "spring.datasource.primary")
  12. public DataSource primaryDataSource() {
  13. return DataSourceBuilder.create().build();
  14. }
  15. @Primary
  16. @Bean(name = "primaryEntityManagerFactory")
  17. public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
  18. EntityManagerFactoryBuilder builder,
  19. @Qualifier("primaryDataSource") DataSource dataSource) {
  20. return builder
  21. .dataSource(dataSource)
  22. .packages("com.example.primary.model")
  23. .persistenceUnit("primary")
  24. .build();
  25. }
  26. @Primary
  27. @Bean(name = "primaryTransactionManager")
  28. public PlatformTransactionManager primaryTransactionManager(
  29. @Qualifier("primaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
  30. return new JpaTransactionManager(entityManagerFactory);
  31. }
  32. }

为第二个数据源做类似配置:

  1. @Configuration
  2. @EnableTransactionManagement
  3. @EnableJpaRepositories(
  4. basePackages = "com.example.secondary.repository",
  5. entityManagerFactoryRef = "secondaryEntityManagerFactory",
  6. transactionManagerRef = "secondaryTransactionManager"
  7. )
  8. public class SecondaryDataSourceConfig {
  9. @Bean(name = "secondaryDataSource")
  10. @ConfigurationProperties(prefix = "spring.datasource.secondary")
  11. public DataSource secondaryDataSource() {
  12. return DataSourceBuilder.create().build();
  13. }
  14. @Bean(name = "secondaryEntityManagerFactory")
  15. public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
  16. EntityManagerFactoryBuilder builder,
  17. @Qualifier("secondaryDataSource") DataSource dataSource) {
  18. return builder
  19. .dataSource(dataSource)
  20. .packages("com.example.secondary.model")
  21. .persistenceUnit("secondary")
  22. .build();
  23. }
  24. @Bean(name = "secondaryTransactionManager")
  25. public PlatformTransactionManager secondaryTransactionManager(
  26. @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
  27. return new JpaTransactionManager(entityManagerFactory);
  28. }
  29. }

步骤 4:创建实体和仓库

com.example.primary.modelcom.example.secondary.model 包中为每个数据源创建实体类。在 com.example.primary.repositorycom.example.secondary.repository 包中为每个数据源创建 JPA 仓库接口。

结论

配置完成后,各个数据源将会在自己的独立上下文中运行,并且可以通过注入相应的 Repository 来进行数据操作。通过这种方式,你可以在 Spring Boot 应用程序中轻松管理多个数据源。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
醉了累了 关注 已关注

最近一次登录:2024-11-20 13:16:21   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图