Spring Boot如何添加可能存在或可能不存在的第二个数据源

标签 spring jpa spring-boot

我希望为我的应用程序提供一个可选的辅助数据库,这样,如果辅助数据库存在于部署的环境中,存储库可以从中检索数据,但如果它不存在,应用程序仍然可以仅使用主数据库正常工作数据库,并且存储库将以应用程序可以知道该数据源不可用的方式运行。

我绝对可以想到完成此类事情的方法,但我想知道是否有更直接的配置类型方法来实现此目的。或者如果有一种模式类型的处理方式是更好的。

最佳答案

您当然可以通过简单的方式使用多个数据库,只需实现 2 个数据库配置并使用 @Primary 注释来注释其中一个即可。

@Bean(name = "mainDataSource")
@Primary
public DataSource mainDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(driver);
    dataSource.setUrl(url);
    dataSource.setUsername(username);
    dataSource.setPassword(password);
    return dataSource;
}

对于辅助数据库,您可以创建几乎相同的内容,但不要在其上添加 @Primary 注释。

@Bean(name = "secondaryDataSource") 
public DataSource secondaryDataSource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(driver);
    dataSource.setUrl(url);
    dataSource.setUsername(username);
    dataSource.setPassword(password);
    return dataSource;
}

请注意,您不需要将 @Primary 注释仅放在 DataSource bean 上,而是可以放在用于连接数据库的任何 bean 中。

完成此操作后,您所要做的就是注释您的 EntityManager 或您通常与 @Qualifier 一起使用的任何其他连接管理器。

@Autowired
@Qualifier("mainEntityManager")
private EntityManager mainDatabase;

@Autowired
@Qualifier("secondEntityManager")
private EntityManager secondDatabase;

就我而言,我更喜欢创建一个类来在后台管理此操作。 您可以在 my article on linkedin. 上找到完整的示例。并查看 example code on GitHub

关于Spring Boot如何添加可能存在或可能不存在的第二个数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46043362/

相关文章:

java - Spring Data Mongodb 存储库没有正确实现继承

java - JPQL 检查日期之间是否有空房

java - 使用 Eclipse 指定数据库名称链接到 SQLServer 数据库?

java - Spring RESTful 应用程序中的 HTTP POST 请求

java - Spring 安全: j_spring_security_check page not found

java - 无法在 Spring Webflux 2.1.0.RELEASE 中启动 Netty 服务器

java - 为什么使用 Zats 测试 .zul 页面时 Controller 没有被注入(inject)?

spring-boot - 是否可以将 Snowflake 与 Spring Boot/JPA/Hibernate 一起使用

hibernate - native 查询 Jpa 存储库在没有列规范的情况下无法工作

java - 如何在事务打开后立即查询 SQL?