java.io.EOFException: Can not read response from server.
Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully...
at org.apache.ibatis.datasource.pooled.PooledConnection.invoke...
數據庫連接池中的連接 空閒超時被 MySQL 服務器主動斷開(默認 wait_timeout=8h),連接池未檢測到失效,借出給業務線程時讀取返回空包,拋出 EOFException。
validationQuery: SELECT 1testWhileIdle: truetimeBetweenEvictionRunsMillis: 60000maxLifetime: 30 分鐘 (1800000ms)SET GLOBAL wait_timeout=28800;jdbc:mysql://...?autoReconnect=true&failOverReadOnly=false使用 HikariCP(Spring Boot 2.x 默認)並設置:
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=5000
此配置可有效避免「連接被服務器斷開而池不知情」的問題。