首页
学习
活动
专区
工具
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

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

相关·内容

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

84930

Spring Boot的yaml配置简介

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

1K10

Spring Boot实现HTTP缓存

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

5.1K50

Spring BootRedis 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.6K63

Freemarkerspring 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 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

60110

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 Boot2.x-10 基于Spring Boot 2.1.2 + Mybatis 2.0.0实现多数据源,支持事务

@Autowired @Qualifier(DataSources.DB1_JDBCTEMPLATE) Step3 验证 代码 概述 Spring Boot2.x-09 基于Spring Boot +...单个数据源 见 Spring Boot2.x-07Spring Boot2.1.2整合Mybatis ---- 思路 让不同的数据源绑定不同的mybatis配置,再细化一点就是让不同的数据源扫描不同的...多说一句,对于跨库的多表操作,这种整合是支持不了的 ---- 步骤 我们基于 Spring Boot2.x-09 基于Spring Boot + Mybatis使用自定义注解实现数据库切换 来改造下,让其支持多数据源...---- Step1 多数据源配置文件applicaiton.yml 自定义前缀,标注了@Configuration的配置通过prefix 将数据源关联起来。...如果需要两个方法上加一个就行了,都加的话,spring又找不到bean注入啦。。

36110

Spring Boot ,如何干掉 if else!

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

1.5K10
领券