如果主要数据源处于离线状态,则数据源在 运行 时间更改为次要数据源

Datasource changes to secondary on run time if primary is offline

我必须处理 spring Oracle 数据库应用程序的以下场景:

  1. Spring 应用程序使用主数据库。同时,辅助数据库存储用于灾难恢复的数据(来自主数据库)。

目前提供第一步。此时我要实现:

  1. 当主数据库脱机时,应用程序应更改与辅助数据库的连接)。

实施应以编程方式进行。如何在不更改当前存在的代码的情况下实现这一目标?有没有可行的解决方案(库)?

我考虑过 AbstractRoutingDataSource 和 ping 数据库(例如,每 5 秒一次),但我不确定这个解决方案。

所以,让我们总结一下这个问题。我无法使用 Oracle RAC(Real Application Cluster)。如果实现应该以编程方式进行,您可以尝试 AbstractRoutingDataSource 方法。

我已经实现了每 1 秒 ping 当前数据库一次的计时器(您可以使用验证查询并检查是否可以从数据库中读取...如果不能,我们假设没有连接,我们可以切换数据源)。

多亏了这一点,我才能在当前数据源离线时在运行时更改数据源。更重要的是它是自动的。

另一方面,也有缺点:

  • 如果数据库不可用,短时间内用户可以看到错误 还没切换。
  • 应用程序的某些部分如果不正确可能会停止工作 防止缺少与数据库的连接。