Spring Boot BrokenPipe / 通信异常

Posted

技术标签:

【中文标题】Spring Boot BrokenPipe / 通信异常【英文标题】:Spring Boot BrokenPipe / Communications Exception 【发布时间】:2018-01-24 15:13:02 【问题描述】:

我的 Spring Boot 应用程序面临连接关闭异常。

这是我的数据库配置:

# For auto recconect it is necessary
spring.datasource.tomcat.test-on-borrow = true
spring.datasource.tomcat.test-while-idle= true
spring.datasource.tomcat.test-on-return = true
spring.datasource.tomcat.validationQuery=SELECT 1

spring.datasource.tomcat.time-between-eviction-runs-millis = 60000
spring.datasource.tomcat.min-evictable-idle-time-millis = 300000

spring.datasource.tomcat.min-idle = 10
spring.datasource.tomcat.max-idle = 100

# Maximum number of active connections that can be allocated from this pool at the same time.
spring.datasource.tomcat.max-active = 100

例外:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收的最后一个数据包是66,612,631 毫秒前。最后一个成功发送到服务器的数据包是 66,612,631 毫秒前。比配置的服务器长 'wait_timeout' 的值。您应该考虑到期和/或 在您的应用程序中使用之前测试连接有效性,增加 服务器为客户端超时配置值,或使用 连接器/J 连接属性 'autoReconnect=true' 以避免这种情况 问题。

java.net.SocketException: 损坏的管道

我看过很多关于启用自动重新连接的主题,但据我所知不推荐。

【问题讨论】:

【参考方案1】:

我将默认数据源提供程序更改为dbcp2,并修复了该错误。

spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource

# For auto recconect it is necessary
spring.datasource.dbcp2.test-on-borrow  = true
spring.datasource.dbcp2.test-while-idle = true
spring.datasource.dbcp2.test-on-return  = true
spring.datasource.dbcp2.validationQuery = SELECT 1

spring.datasource.dbcp2.time-between-eviction-runs-millis = 60000
spring.datasource.dbcp2.min-evictable-idle-time-millis = 300000

spring.datasource.dbcp2.min-idle = 10
spring.datasource.dbcp2.max-idle = 100

【讨论】:

以上是关于Spring Boot BrokenPipe / 通信异常的主要内容,如果未能解决你的问题,请参考以下文章

套接字:send() 函数返回“Broken Pipe”错误

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent

spring-boot系列:初试spring-boot