oracle集成高可用方案后Java程序无法自动重连记录

背景:
最近公司升级oracle数据库,源数据库版本oracle10,升级数据库版本oracle12c.2。升级数据库后做了双节点的高可用,在测试应用程序是否可以顺利兼容高可用的时候,发现停掉第一节点,只运行第二节点,程序无法自动连接切换为2节点的数据库。
原因:
经过排查发现,我的应用在配置数据源配置的时候没有配置回收连接池里超时的连接。由于我的应用有很多,有的使用SSM架构,有的使用springboot架构。所有在不同的项目参数配置文件里增加以下代码即可解决问题。

#是否在自动回收超时连接的时候打印连接的超时错误
spring.datasource.log-abandoned=true
#是否自动回收超时连接
spring.datasource.remove-abandoned=true
#超时时间(以秒数为单位)
spring.datasource.remove-abandoned-timeout=180
#检测数据库的查询语句
spring.datasource.validation-query=select 1 from dual
spring.datasource.test-on-borrow=true

以上为springboot使用代码,如果想在SSM或者其他框架内使用,换成相应框架的配置格式即可。

oracle12c中连接数据库格式:
jdbc:oracle:this:@//192.169.1.2:1521/cis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle数据库自动重连机制可以通过设置参数来实现。以下是实现自动重连的步骤: 1. 修改Oracle客户端连接参数 在客户端连接参数中添加以下参数,可以实现自动重连: - CONNECT_TIMEOUT:连接超时时间,单位为秒 - RETRY_COUNT:重试连接次数 - RETRY_DELAY:重试连接时间间隔,单位为秒 例如,将CONNECT_TIMEOUT设置为30秒,RETRY_COUNT设置为3次,RETRY_DELAY设置为10秒,则客户端连接Oracle数据库时,在连接超时前,会尝试最多3次重新连接,每次重试之间间隔10秒。 2. 修改数据库参数 在Oracle数据库中,可以通过修改以下参数来实现自动重连: - SQLNET.EXPIRE_TIME:设置连接的超时时间,单位为分钟,默认为0,表示不启用该功能。如果设置为非零值,则Oracle会向客户端发送一个探测包,如果在指定时间内没有收到客户端的响应,则Oracle会断开连接。客户端可以通过捕捉该异常并重新连接来实现自动重连。 - SQLNET.RECONNECT_DELAY:设置断开连接后重新连接的时间间隔,单位为秒。例如,将该参数设置为5秒,则在连接断开后,会等待5秒后尝试重新连接。 - SQLNET.RECONNECT_ATTEMPTS:设置重试连接的次数。例如,将该参数设置为3次,则在连接断开后,会尝试最多3次重新连接。 需要注意的是,SQLNET.EXPIRE_TIME参数只能检测客户端是否存活,而不能检测服务器是否存活。因此,如果服务器挂掉,客户端可能还会一直等待超时时间,导致连接一直处于等待状态。因此,在使用该参数时,需要谨慎考虑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值