testWhileIdle,validationQuery,timeBetweenEvictionRunsMillis均已设置,但从监控页面的SQL执行来看,链接验证并没有按照设置的时间工作。当与数据库连接不稳定或者连接长时间未操作造成数据库连接time_out时,向连接池请求连接会报已关闭连接的错误,只能重启tomcat恢复。有解决办法吗?
原提问者GitHub用户fevermxp
出现连接关闭的错误可能是因为连接池中的连接已经被数据库或者其他因素关闭了,而连接池自身没有及时发现并且回收这些无效的连接。这样就会导致连接池中的连接数量不足,向连接池请求连接时无法获取有效的连接,从而出现连接关闭的错误。
针对这个问题,可以尝试以下几个方案:
修改连接池配置参数
可以尝试增加连接池的配置参数,例如增加maxActive、maxWait、minEvictableIdleTimeMillis等参数的值,以增加连接池中可用连接的数量和存活时间,从而减少连接关闭的错误。
检查数据库连接的稳定性
连接关闭的错误也可能是因为数据库连接本身存在问题,例如数据库服务器宕机、网络故障等。可以检查数据库连接的稳定性,例如检查数据库服务器的状态、网络连接的稳定性等,从而确定是否存在这方面的问题。
设置连接池监控和日志记录
可以开启连接池监控功能,例如使用Druid连接池的监控功能,监控连接池中连接的使用情况,从而及时发现和处理连接关闭的问题。同时,可以在连接池中设置日志记录,记录连接池中连接的创建、关闭、回收等过程,从而更好地了解和排查连接关闭的原因。
使用连接池健康检查功能
一些连接池框架,例如HikariCP,提供了健康检查功能,可以在连接池中对连接进行定期的健康检查,以确保连接的有效性。可以尝试使用这个功能,从而及时发现并回收无效的连接,避免出现连接关闭的问题。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
出现已关闭连接的错误通常是由于数据库连接超时或连接池配置不正确导致的。以下是一些可能的解决方案:
调整连接池的配置参数:确保testWhileIdle
、validationQuery
和timeBetweenEvictionRunsMillis
等参数正确配置。这些参数用于验证空闲连接,并定期检查连接是否有效。您可以根据具体情况适当增加timeBetweenEvictionRunsMillis
的值,以便更频繁地检查连接的有效性。
检查数据库连接超时设置:确认数据库服务器的连接超时设置与连接池的配置相匹配。如果数据库服务器的连接超时时间比连接池的配置短,可能会导致连接在数据库端被关闭,但连接池仍然认为连接是有效的。
检查数据库服务器日志:查看数据库服务器的日志,检查是否有任何与连接超时或连接关闭相关的错误或警告信息。这可以帮助确定问题的根本原因。
使用连接断开重连机制:在应用程序中捕获连接已关闭的异常,并在发生此异常时重新建立连接。这样可以避免需要重启Tomcat来恢复连接。
检查连接池的配置和使用方式:确保在应用程序中正确地使用连接池对象,并及时释放连接资源。避免长时间占用连接而不使用的情况。
升级数据库驱动程序:如果使用的是旧版本的数据库驱动程序,考虑升级到最新版本。新版本的驱动程序可能修复了一些连接超时或连接关闭的问题。
检查网络连接稳定性:确保应用程序和数据库服务器之间的网络连接是稳定的,并且没有任何网络故障或中断。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。