【问题标题】: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在springboot中,我可以连接两个数据库吗?如果一个数据库出现异常,我可以动态连接到另一个数据库
【发布时间】:2021-12-22 19:33:59
【问题描述】:

详细要求:

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

请帮帮我。

提前致谢。

【问题讨论】:

  • 你提到的两个数据库,是如何同步的?是 Data Guard 中的 Oracle 吗?
  • 本文档描述了客户端故障转移的最佳实践,也许对你有帮助:docs.oracle.com/database/121/HABPT/config_fcf.htm#HABPT4969
  • @RobertoHernandez.. 是的,它是数据保护
  • 您可以将 jdbc 与 TAF 一起使用。你要我举个例子来回答
  • @RobertoHernandez.. 是的,请

标签: database oracle spring-boot hibernate datasource


【解决方案1】:

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

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

数据库设置

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

【讨论】:

  • 你提到的JDBC连接..你能给我举个例子吗?
  • 在答案中。如果这是您正在寻找的,请接受答案。这是在 StackOverflow 中表达感谢的最佳方式
  • 您能否提供一个 jdbc 连接的示例.. 假设我的详细信息是:主 ip:10.32.9.234 其他 ip:10.32.9.235 服务名称:db_prod
  • @AnuragGhosh 什么是数据库端口?
  • jdbc:oracle:thin:@(description=(address=(host=10.32.9.234)(protocol=tcp)(port=yourdbport))(address=(host=10.32.9.235)(protocol=tcp)(port=yourport))(failover=yes)(connect_data=(service_name=db_prod)(failover_mode=(type=select)(method=basic)))) 将 yourport 替换为您环境中的数据库端口
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多