database - 在springboot中,我可以连接两个数据库吗?如果一个数据库出现异常,我可以动态连接到另一个数据库
问题描述
详细要求:
所以我有两个数据库(两个都是同步的),不知何故,一个数据库出现故障,Spring Boot 应用程序开始出现异常。在这种情况下,我希望应用程序连接到第二个数据库。
请帮我解决一下这个。
提前致谢。
解决方案
由于您在 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 设置。
推荐阅读
- apache-kafka - Apache Storm:如何从 Kafka Spout 微批处理事件
- reactjs - this.setState 不适用于 React 中的此代码
- azure-devops - Azure Devops,在 PR 创建期间制作“工作项”字段
- ios - 如何在集合视图中显示从数组到特定 indexPath 的项目
- mybatis - 为什么 sqlsession 事务在 mybatis 中不起作用?
- php - 当我需要运行服务器时,laravel 框架错误
- java - 如果rest api抛出500内部服务器错误,如何捕获由球衣中的rest api返回的响应对象的内容
- python - 如何在 Python OpenCV 中裁剪图像/视频
- vba - 循环仅在第一个实例上更改类别
- kubernetes - 裸机设置上的 Kubeflow 设置?