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

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

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

相关·内容

  • Spring Boot 中如何配置 Profile

    一个应用为了在不同的环境下工作,常常会有不同的配置,代码逻辑处理。Spring Boot 对此提供了简便的支持。...插件激活 profile main 方法激活 profile jar 激活 profile 在 Java 代码中激活 profile 区分环境的配置 properties 配置 假设,一个应用的工作环境有...- 测试环境配置 application-prod.properties - 生产环境配置 在 applcation.properties 文件中可以通过以下配置来激活 profile: spring.profiles.active...application-test.yml - 测试环境配置 application-prod.yml - 生产环境配置 在 applcation.yml 文件中可以通过以下配置来激活 profile:...spring: profiles: active: prod 此外,yml 文件也可以在一个文件中完成所有 profile 的配置: # 激活 prod spring: profiles

    87430

    Spring Boot中的yaml配置简介

    搞Spring Boot的小伙伴都知道,Spring Boot中的配置文件有两种格式,properties或者yaml,一般情况下,两者可以随意使用,选择自己顺手的就行了,那么这两者完全一样吗?...狡兔三窟 首先application.yaml在Spring Boot中可以写在四个不同的位置,分别是如下位置: 项目根目录下的config目录中 项目根目录下 classpath下的config目录中...即如果有同一个属性在四个文件中都出现了,以优先级高的为准。 那么application.yaml是不是必须叫application.yaml这个名字呢?当然不是必须的。...这个属性,在第一个属性中,表示自己重新定义配置文件的位置,项目启动时就按照定义的位置去查找配置文件,这种定义方式会覆盖掉默认的四个位置,也可以使用第二种方式,第二种方式则表示在四个位置的基础上,再添加几个位置...,这一点在有些配置中是非常有用的,例如在Spring Cloud Zuul的配置中,当我们配置代理规则时,顺序就显得尤为重要了。

    1.1K10

    Spring Boot中Redis Template集群配置

    1、问题背景 在一个Spring boot项目中,需要使用redis作为缓存,于是将使用spring-boot-starter-data-redis,具体依赖如下: ...> 2.0.4.RELEASE 在测试环境中,功能测试,压力测试,都没有发现问题,原因是测试环境中redis自行搭建,没有设置密码...错误配置如下: # 错误配置 # Redis配置 spring.redis.cluster.nodes=127.0.0.1:6379 ### 连接超时时间(毫秒) spring.redis.timeout...spring.redis.jedis.pool.min-idle=0 需要改成正确的配置,修改之后无此现象,具体配置如下: 单机版: # 单机版 # Redis配置 spring.redis.host...validateClusterNodeMembership 默认是true导致; 2.2.2、解决办法 由于spring boot未能直接通过配置文件直接修改此配置,因此需要自定义Redis配置,具体代码如下

    6.9K63

    在Spring Boot中实现HTTP缓存

    为了设置在Spring的控制器中的HTTP标头,就要在RESTContoller用ResponseEntity包装类。...Spring再次提供了一个辅助方法,简化了上述日期的比较。这个名为checkNotModified()的方法可以在WebRequest包装器类中找到,您可以将其作为输入添加到控制器的方法中。...Spring框架为您提供了ETag响应过滤器实现,它可以为您完成。您所要做的就是在应用程序中配置过滤器。...在Spring应用程序中添加HTTP过滤器的最简单方法是通过配置类中的FilterRegistrationBean。...在适用时,您应该始终支持客户端缓存验证。 我们还讨论了服务器端验证并比较了Last-Modified和ETag标头。最后,您了解了如何在Spring应用程序中设置全局ETag过滤器。

    5.3K50

    spring boot dubbo配置(上古卷轴5基础整合包)

    SpringBoot整合Dubbo3.0基础配置(dubbo-spring-boot-starter) 一、说明 众所周知,阿里早已把dubbo捐赠给了Apache,现在dubbo由Apache在维护更新...本demo项目dubbo配置属性只是基础配置,如需更多功能配置,请自行扩展。 本demo项目采用zookeeper为注册中心,默认你已经安装好zookeeper服务器,并已经启动。...当然你也可以不使用标签,不依赖spring-boot-starter-parent,有些教程让依赖spring-boot-dependencies,这样你就要自己解决打包的问题。... 配置文件: # 这里的配置属性只是基础配置,如需更多功能配置,请自行扩展 dubbo: application: name...七、打包测试 项目打包上线才是我们最终目的,所以我们需要测试打包后的效果 打包后的项目,只需要执行provider和consumer就可以了 关闭idea启动的工程,运行jar包 运行provider

    62310

    Freemarker在spring boot中的应用

    那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据,而在模板之外可以专注于要展示什么数据。 ?...设计师无需面对模板中的复杂逻辑, 在没有程序员来修改或重新编译代码时,也可以修改页面的样式。...2.2环境配置文件准备 2.2.1POM文件如下: Spring boot 必备 + spring boot 测试类 ? ? ? Spring boot的父依赖(必备) ? ?...在DAO接口上添加@Mapper 标签 Controller中无法找到serviceimple的bean 在service层上添加@service 不知道程序如何找到mapper文件的 在Application.properties...Spring boot 返回字符串,不返回渲染页面 把@RestController替换为@Controller注解 @RestController注解表示返回的内容都是HTTP Content不会被模版引擎处理的

    2.1K30

    Spring Boot2 系列教程(五)Spring Boot中的 yaml 配置

    搞 Spring Boot 的小伙伴都知道,Spring Boot 中的配置文件有两种格式,properties 或者 yaml,一般情况下,两者可以随意使用,选择自己顺手的就行了,那么这两者完全一样吗...狡兔三窟 首先 application.yaml 在 Spring Boot 中可以写在四个不同的位置,分别是如下位置: 项目根目录下的 config 目录中 项目根目录下 classpath 下的 config...即如果有同一个属性在四个文件中都出现了,以优先级高的为准。 那么 application.yaml 是不是必须叫 application.yaml 这个名字呢?当然不是必须的。...这个属性,在第一个属性中,表示自己重新定义配置文件的位置,项目启动时就按照定义的位置去查找配置文件,这种定义方式会覆盖掉默认的四个位置,也可以使用第二种方式,第二种方式则表示在四个位置的基础上,再添加几个位置...,这一点在有些配置中是非常有用的,例如在 Spring Cloud Zuul 的配置中,当我们配置代理规则时,顺序就显得尤为重要了。

    1.1K50

    在 Spring Boot 中,如何干掉 if else

    现在可以了解到,我们主要的业务逻辑是在处理器中实现的,因此有多少个订单类型,就对应有多少个处理器。...自定义注解 @HandlerType: 抽象处理器 AbstractHandler: 自定义注解和抽象处理器都很简单,那么如何将处理器注册到spring容器中呢?...具体思路是: 1、扫描指定包中标有@HandlerType的类; 2、将注解中的类型值作为key,对应的类作为value,保存在Map中; 3、以上面的map作为构造函数参数,初始化HandlerContext...,将其注册到spring容器中; 我们将核心的功能封装在HandlerProcessor类中,完成上面的功能。...HandlerProcessor: ClassScanner:扫描工具类源码 HandlerProcessor需要实现BeanFactoryPostProcessor,在spring处理bean前,将自定义的

    1.2K60

    在 Spring Boot 中,如何干掉 if else!

    现在可以了解到,我们主要的业务逻辑是在处理器中实现的,因此有多少个订单类型,就对应有多少个处理器。...自定义注解和抽象处理器都很简单,那么如何将处理器注册到spring容器中呢?...具体思路是: 1、扫描指定包中标有@HandlerType的类; 2、将注解中的类型值作为key,对应的类作为value,保存在Map中; 3、以上面的map作为构造函数参数,初始化HandlerContext...,将其注册到spring容器中; 我们将核心的功能封装在HandlerProcessor类中,完成上面的功能。...ClassScanner:扫描工具类源码 HandlerProcessor需要实现BeanFactoryPostProcessor,在spring处理bean前,将自定义的bean注册到容器中。

    1.5K10
    领券