【问题标题】:Spring Boot switch between multiple databases (data-sources)Spring Boot 在多个数据库(数据源)之间切换
【发布时间】:2019-11-05 11:10:39
【问题描述】:

我有一个用于具有 2 个不同设置(=2 个不同 jars)的项目的 spring boot REST API 应用程序。两者都需要实现,但我不知道该怎么做或最好的方法是什么。

两种设置都需要与在线数据库(在服务器上;AWS)建立连接,并与离线或本地数据库(在机器/PC 本身上运行)建立连接。两种设置不同的是离线或本地连接。


设置 1:
当应用程序启动时,它需要连接到在线数据库。当发生错误或与在线数据库的连接丢失时,需要连接到离线/本地数据库。

发生错误或连接丢失后,不需要重新连接在线数据库。

设置 2:
当应用程序启动时,它需要连接到在线和离线数据库。因此,当用户向 REST API 发帖时,在线和离线数据库都需要更新(除非发生错误或与在线数据库的连接丢失)。如果用户只是做一个get请求,最好从在线数据库中获取数据,除非发生错误或者与在线数据库的连接丢失,否则可以使用离线数据库。

它不需要在发生错误或连接丢失后重新连接在线数据库,但在此设置中会很好。 再次建立连接后同步数据也不是必需的(但可能是一个不错的功能)。


我已经看到a similar post 的解决方案是使用 ha-jdbc 但它是一个旧帖子......当我尝试将它添加到我的 pom.xml 文件时,Maven 只是找不到依赖项。

经过更多搜索和尝试,我能够将 ha-jdbc 添加到我的 pom.xml 中。我要做的是添加一个包含 ha-jdbc 的存储库。

<project>
    <repositories>
        <repository>
            <id>jbossrepository</id>
            <name>jbossrepository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/</url>
        </repository>
    </repositories>
    <dependency>
        <dependency>
            <groupId>net.sf.ha-jdbc</groupId>
            <artifactId>ha-jdbc</artifactId>
            <version>3.0.3</version>
        </dependency>
    </dependency>
</project>

还没有看到我是否可以让它工作,如果它是我正在寻找的......
ha-jdbc 不值得尝试,一个接一个的错误或问题,它也只是旧的 java...


版本:
- 爪哇:1.8
- org.springframework.boot (spring-boot-starter-parent): 2.1.8.RELEASE
- 数据库(在线和离线):PostgreSQL 11.5

【问题讨论】:

  • 为什么 ha-jdbc 不能工作?它与 Spring Boot 无关,它只是您需要配置的备用数据源实现。适用于任何框架。
  • @ErangaGamagedara 我已经看过了,但是我不清楚它何时使用 db1 以及何时切换到 db2。对我来说,这看起来像 bot 数据库完全不同,并且在任何时候都需要。就我而言,两个数据库是彼此的副本,但并非每个设置都需要对两者进行持续访问(正如我在帖子中解释的那样)。也许你能告诉我更多关于这件事的信息?

标签: java postgresql spring-boot multiple-databases


【解决方案1】:

看看这个example code。在那里您可以找到已经实施的有效解决方案。 它背后的逻辑是EnableJpaRepositories,它基于包启用它(basePackages)

【讨论】:

  • 谢谢,我已经看到了,它确实接近我需要的,但这是两个数据库不同的时候。在我的情况下,它们是相同的,对于“设置 2”,如果发生错误或连接丢失,我需要从一个切换到另一个。我不知道如何将您的示例更改为我的特定需求...在此示例中,存储库和域也不同,而对我而言,两个数据库完全相同...我不太愿意复制所有内容以连接另一个数据库。
  • 第二个数据库有不同的连接字符串、用户名和密码?
  • 不同的主机是的,用户和密码是一样的。 shema 和数据/内容是一个副本,所以它们有相同的表和相同的序列,相同的数据...
  • 哪个数据库? (哪个供应商?是 Postgres 吗?)
  • 例如,如果您使用的是 postgreSQL,您可以将实例传递给连接字符串 jdbc:postgresql://host1:port1,host2:port2/database,这将保证它使用 bost 主机/实例,如果其中一个失败,它会连接其他的
猜你喜欢
  • 2018-08-18
  • 2022-01-08
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2019-02-20
  • 2021-08-07
  • 1970-01-01
  • 2015-02-21
相关资源
最近更新 更多