当服务器在没有任何http请求的情况下长时间运行时,我收到了“断管”异常。经过一些调查后,我发现发生此异常是因为服务器关闭了它的数据库连接,并在客户端在连接关闭时请求资源时发生。为了解决这个问题,我将以下内容添加到了jdbc conenction url
中?autoReconnect=true
为了以防万一,我还提高了机器上的堆内存。此插件向导服务器请求资源的http客户端也不多。还有其他可能发生的事吗?
供参考的错误讯息
You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
我有办法在dropwizard应用程序中配置连接池吗? 或者将mysqld的'interactive-timeout'和'wait_timeout'属性改为8小时以上是一个好习惯?
答案 0 :(得分:2)
感谢您的帮助,我通过将以下内容添加到yaml
文件
checkConnectionWhileIdle
:true
checkConnectionOnReturn
:true
checkConnectionOnBorrow
:true
确保所有事务都已提交,如果出现异常则回滚,并且会话在使用后关闭。
答案 1 :(得分:0)
根据您使用的是JDBi,Hibernate还是其他内容,我建议您使用提供的捆绑包来设置连接。这些捆绑包带有一个内置池,可以轻松配置,因为链接上的示例应该显示。
如果使用普通JDBC或其他OR映射器,您可以自己编写Managed Object或正确的捆绑包,或者尝试在启动期间直接使用ManagedPooledDatasource。