Dropwizard 应用程序中的 Broken Pipe 异常
Broken Pipe exception in Dropwizard application
当服务器长时间 运行 没有任何 http 请求时,我收到 'broken pipe' 异常。经过一些调查,我发现发生此异常是因为服务器关闭了其数据库连接,并且在连接关闭时客户端请求资源时发生。为了解决这个问题,我将以下内容添加到 jdbc 连接 url
?autoReconnect=true
为了以防万一,我还增加了机器上的堆内存。也没有很多 http 客户端从这个 dropwizard 服务器请求资源。还有其他可能发生的事情吗?
报错信息供参考
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小时以上是个好习惯?
根据您使用的是 JDBi, Hibernate 还是其他,我建议使用提供的捆绑包来设置连接。这些捆绑包带有一个内置池,可以轻松配置,如链接中的示例所示。
如果您使用纯 JDBC 或其他 OR 映射器,您始终可以在启动期间直接写入 Managed Object or a proper bundle yourself, or try to leverage a ManagedPooledDatasource。
感谢您的帮助,我通过将以下内容添加到 yaml
文件
解决了这个问题
checkConnectionWhileIdle
: true
checkConnectionOnReturn
: true
checkConnectionOnBorrow
: true
并确保所有事务都已提交,在出现异常时回滚,会话在使用后关闭。
当服务器长时间 运行 没有任何 http 请求时,我收到 'broken pipe' 异常。经过一些调查,我发现发生此异常是因为服务器关闭了其数据库连接,并且在连接关闭时客户端请求资源时发生。为了解决这个问题,我将以下内容添加到 jdbc 连接 url
?autoReconnect=true
为了以防万一,我还增加了机器上的堆内存。也没有很多 http 客户端从这个 dropwizard 服务器请求资源。还有其他可能发生的事情吗?
报错信息供参考
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小时以上是个好习惯?
根据您使用的是 JDBi, Hibernate 还是其他,我建议使用提供的捆绑包来设置连接。这些捆绑包带有一个内置池,可以轻松配置,如链接中的示例所示。
如果您使用纯 JDBC 或其他 OR 映射器,您始终可以在启动期间直接写入 Managed Object or a proper bundle yourself, or try to leverage a ManagedPooledDatasource。
感谢您的帮助,我通过将以下内容添加到 yaml
文件
checkConnectionWhileIdle
:true
checkConnectionOnReturn
:true
checkConnectionOnBorrow
:true
并确保所有事务都已提交,在出现异常时回滚,会话在使用后关闭。