首页 > 解决方案 > 在springboot中,我可以连接两个数据库吗?如果一个数据库出现异常,我可以动态连接到另一个数据库

问题描述

详细要求:

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

请帮我解决一下这个。

提前致谢。

标签: databaseoraclespring-boothibernatedatasource

解决方案


由于您在 Oracle 中有一个 DataGuard 实施,其中一个主数据库和另一个处于备用模式,Oracle 透明应用程序故障转移是要走的路。

透明应用程序故障转移 (TAF) 是 Java 数据库连接 (JDBC) Oracle 调用接口 (OCI) 驱动程序的一项功能。如果建立连接的数据库实例失败,它使应用程序能够自动重新连接到数据库。在这种情况下,活动事务会回滚。

数据库设置

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

数据库:TAF 中的 TESTDB 服务: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 和/或 Hibernate,以及普通的 Jboss Java 应用程序。我亲自测试了对应用程序完全透明的故障转移方案。显然,如果您在执行故障转移时正在运行事务或查询,您将收到错误消息。但是在从主站点切换到备用站点的情况下,您不需要手动更改任何 jdbc 设置。


推荐阅读