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 文件

解决了这个问题
  1. checkConnectionWhileIdle: true
  2. checkConnectionOnReturn: true
  3. checkConnectionOnBorrow: true

并确保所有事务都已提交,在出现异常时回滚,会话在使用后关闭。