月下独码 2024-08-30 19:30 采纳率: 85.7%
浏览 19
已结题

数据库宕机后重启,druid连接池不能自动恢复正常,怎么解决?

数据库宕机后重启,druid连接池不能自动恢复正常。日志总是包连接不上数据库,但是重启应用,druid立即恢复正常使用!

这是什么情况呢?

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-30 19:31
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    Druid连接池在数据库宕机后无法自动恢复的原因可能与BreakAfterAcquireFailure属性设置、连接池的自动重连机制以及相关的配置项有关。解决此问题可以从以下几个方面着手:

    1. BreakAfterAcquireFailure属性设置:当BreakAfterAcquireFailure设置为true时,如果请求连接失败,Druid不会尝试重连,而是拒绝客户端的请求。这可能导致即使数据库重启后,Druid也无法恢复正常工作。建议将BreakAfterAcquireFailure设置为false,以允许Druid在数据库可用时自动重连。

    2. 创建连接线程的状态检测:当BreakAfterAcquireFailure为true时,如果多次重试后仍无法获取连接,CreateConnectionThread线程可能会终止。因此,需要在每次获取连接时检查CreateConnectionThread线程的状态,如果发现线程已终止,则应关闭并重新创建连接池。

    3. 调整重试次数和间隔:为了避免因频繁重连导致的内存溢出问题,可以调整连接错误时的重试次数(connection-error-retry-attempts)和重试间隔(timeBetweenEvictionRunsMillis),以控制连接池的行为。

    4. 合理配置连接池属性:除了上述属性外,还应确保其他连接池属性(如initialSize, minIdle, maxActive, maxWait等)根据实际应用场景进行合理配置,以确保连接池的稳定性和性能。

    5. 使用testWhileIdle和testOnBorrow:通过合理设置testWhileIdle和testOnBorrow属性,可以在空闲时或借用时检查数据库连接的有效性,从而保证从连接池中获取的连接是健康的。

    6. 应用层面的监控和干预:在应用层面实现对Druid连接池状态的监控,一旦检测到连接异常,可以通过应用逻辑来重置或重启连接池,以实现快速恢复。

    7. 考虑使用第三方监控工具:可以考虑使用如阿里云ARMS等第三方应用性能监控工具,这些工具可以提供实时的性能监控和故障排查,帮助及时发现和解决Druid连接池的问题。

    综上所述,Druid连接池在数据库宕机后无法自动恢复的问题,通常可以通过调整Druid的配置来解决。同时,确保在实际部署中考虑到了所有相关的配置项,并进行充分的测试,以验证解决方案的有效性。在生产环境中,还应该实施适当的监控措施,以便在出现问题时能够迅速发现并采取行动。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月7日
  • 已采纳回答 8月30日
  • 创建了问题 8月30日

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?