首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring boot :在同一个包中配置两个DataSources

Spring Boot是一个用于快速构建基于Spring框架的Java应用程序的开发框架。它简化了Spring应用程序的配置和部署过程,提供了一种约定大于配置的开发方式。

在同一个包中配置两个DataSources意味着我们希望在一个Spring Boot应用程序中使用两个不同的数据库。这种情况下,我们可以通过以下步骤来配置:

  1. application.propertiesapplication.yml配置文件中添加两个数据源的配置信息。例如:
代码语言:properties
复制

第一个数据源

spring.datasource.url=jdbc:mysql://localhost:3306/db1

spring.datasource.username=username1

spring.datasource.password=password1

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

第二个数据源

spring.datasource.secondary.url=jdbc:mysql://localhost:3306/db2

spring.datasource.secondary.username=username2

spring.datasource.secondary.password=password2

spring.datasource.secondary.driver-class-name=com.mysql.jdbc.Driver

代码语言:txt
复制
  1. 创建两个数据源的配置类,分别用于配置第一个数据源和第二个数据源。例如:
代码语言:java
复制

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(

代码语言:txt
复制
   entityManagerFactoryRef = "entityManagerFactory",
代码语言:txt
复制
   transactionManagerRef = "transactionManager",
代码语言:txt
复制
   basePackages = { "com.example.repository1" }

)

public class DataSource1Config {

代码语言:txt
复制
   @Primary
代码语言:txt
复制
   @Bean(name = "dataSource1")
代码语言:txt
复制
   @ConfigurationProperties(prefix = "spring.datasource")
代码语言:txt
复制
   public DataSource dataSource() {
代码语言:txt
复制
       return DataSourceBuilder.create().build();
代码语言:txt
复制
   }
代码语言:txt
复制
   @Primary
代码语言:txt
复制
   @Bean(name = "entityManagerFactory")
代码语言:txt
复制
   public LocalContainerEntityManagerFactoryBean entityManagerFactory(
代码语言:txt
复制
       EntityManagerFactoryBuilder builder,
代码语言:txt
复制
       @Qualifier("dataSource1") DataSource dataSource
代码语言:txt
复制
   ) {
代码语言:txt
复制
       return builder
代码语言:txt
复制
           .dataSource(dataSource)
代码语言:txt
复制
           .packages("com.example.entity1")
代码语言:txt
复制
           .build();
代码语言:txt
复制
   }
代码语言:txt
复制
   @Primary
代码语言:txt
复制
   @Bean(name = "transactionManager")
代码语言:txt
复制
   public PlatformTransactionManager transactionManager(
代码语言:txt
复制
       @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory
代码语言:txt
复制
   ) {
代码语言:txt
复制
       return new JpaTransactionManager(entityManagerFactory);
代码语言:txt
复制
   }

}

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(

代码语言:txt
复制
   entityManagerFactoryRef = "secondaryEntityManagerFactory",
代码语言:txt
复制
   transactionManagerRef = "secondaryTransactionManager",
代码语言:txt
复制
   basePackages = { "com.example.repository2" }

)

public class DataSource2Config {

代码语言:txt
复制
   @Bean(name = "dataSource2")
代码语言:txt
复制
   @ConfigurationProperties(prefix = "spring.datasource.secondary")
代码语言:txt
复制
   public DataSource dataSource() {
代码语言:txt
复制
       return DataSourceBuilder.create().build();
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean(name = "secondaryEntityManagerFactory")
代码语言:txt
复制
   public LocalContainerEntityManagerFactoryBean entityManagerFactory(
代码语言:txt
复制
       EntityManagerFactoryBuilder builder,
代码语言:txt
复制
       @Qualifier("dataSource2") DataSource dataSource
代码语言:txt
复制
   ) {
代码语言:txt
复制
       return builder
代码语言:txt
复制
           .dataSource(dataSource)
代码语言:txt
复制
           .packages("com.example.entity2")
代码语言:txt
复制
           .build();
代码语言:txt
复制
   }
代码语言:txt
复制
   @Bean(name = "secondaryTransactionManager")
代码语言:txt
复制
   public PlatformTransactionManager transactionManager(
代码语言:txt
复制
       @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory
代码语言:txt
复制
   ) {
代码语言:txt
复制
       return new JpaTransactionManager(entityManagerFactory);
代码语言:txt
复制
   }

}

代码语言:txt
复制

注意,@EnableJpaRepositories注解用于启用JPA仓库,并指定实体类和仓库接口所在的包。

  1. 在需要使用数据源的地方,使用@Qualifier注解指定要使用的数据源。例如:
代码语言:java
复制

@Service

public class MyService {

代码语言:txt
复制
   private final MyRepository1 repository1;
代码语言:txt
复制
   private final MyRepository2 repository2;
代码语言:txt
复制
   public MyService(
代码语言:txt
复制
       @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory1,
代码语言:txt
复制
       @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory2
代码语言:txt
复制
   ) {
代码语言:txt
复制
       this.repository1 = new MyRepository1(entityManagerFactory1);
代码语言:txt
复制
       this.repository2 = new MyRepository2(entityManagerFactory2);
代码语言:txt
复制
   }
代码语言:txt
复制
   // 使用repository1和repository2进行数据库操作

}

代码语言:txt
复制

通过以上步骤,我们就可以在同一个包中配置两个DataSources,并在应用程序中使用它们进行数据库操作。

推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器CVM、腾讯云容器服务TKE。

腾讯云数据库MySQL产品介绍链接地址:https://cloud.tencent.com/product/cdb

腾讯云云服务器CVM产品介绍链接地址:https://cloud.tencent.com/product/cvm

腾讯云容器服务TKE产品介绍链接地址:https://cloud.tencent.com/product/tke

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1时5分

云拨测多方位主动式业务监控实战

3分59秒

基于深度强化学习的机器人在多行人环境中的避障实验

5分33秒

JSP 在线学习系统myeclipse开发mysql数据库web结构java编程

领券