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 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?
《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》