在 springboot 中,我可以连接两个数据库,这样如果一个数据库出现异常,那么我可以动态连接到另一个数据库

In springboot, can I connect with two database so that if one database is giving exception then I can connect to the other database dynamically

详细要求:

所以我有两个数据库(两者都是同步的),不知何故其中一个出现故障,Spring 启动应用程序开始出现异常。在这种情况下,我希望应用程序连接到第二个数据库。

请帮我解决这个问题。

提前致谢。

由于您在 Oracle 中有一个 DataGuard 实现,其中一个主数据库和另一个处于备用模式,因此 Oracle 透明应用程序故障转移是可行的方法。

Transparent Application Failover (TAF) is a feature of the Java Database Connectivity (JDBC) Oracle Call Interface (OCI) driver. It enables the application to automatically reconnect to a database, if the database instance to which the connection is made fails. In this case, the active transactions roll back.

数据库设置

我假设您的 DG 实施使用 Oracle Restart。

数据库:TESTDB TAF 服务:TESTDB_HA

主站点

srvctl add service -d testdb -s testdb_ha -l PRIMARY -y AUTOMATIC -e select -m BASIC -z 200 -w 1
srvctl start service -d testdb -s testdbha 

备用站点

srvctl add service -d testdb -s testdb_ha-l PRIMARY -y AUTOMATIC -e select -m BASIC -z 200 -w 1
srvctl modify service -d testdb -s testdb_ha -failovermethod basic

你的 JDBC 人脉

jdbc:oracle:thin:@(description=(address=(host=primaryserver)(protocol=tcp)(port=yourdbport))(address=(host=standbyserver)(protocol=tcp)(port=yourport))(failover=yes)(connect_data=(service_name=testdb_ha)(failover_mode=(type=select)(method=basic))))

在此设置中,如果从主设备故障转移到备用设备,一旦故障转移完成,连接将继续工作,无需人工干预。

我目前在 Kubernetes 的应用程序商店中使用此配置,使用 Spring Boot and/or Hibernate,以及正常的 Jboss Java 应用程序。我亲自测试了对应用程序完全透明的故障转移场景。显然,如果在执行故障转移时有一个事务或查询 运行,您将得到一个错误。但是在从主站点切换到备用站点的情况下,您不需要手动更改任何 jdbc 设置。