Java出现SSLException: closing inbound before receiving peer's close_notify可否安全忽略
关于MySQL Connector/J 5.1.47关闭连接时SSL警告的说明
警告成因
这个SSL异常是Connector/J 5.1.47版本的连接关闭逻辑与Java 8 SSL实现的兼容问题导致的:
- 驱动在关闭连接的流程中,会先主动调用SSL套接字的
shutdownInput()方法关闭输入流 - 此时MySQL服务端的SSL关闭通知
close_notify还未完成传输,Java 8的SSLSocketImpl实现会直接抛出javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify异常 - 驱动内部已经捕获了该异常,仅打印警告日志,没有向上层业务代码抛出异常,连接关闭的核心逻辑已经执行完成
风险判断
该警告是完全无害的,除占用日志存储空间外无其他副作用:
- 你自行验证的数据库端会话已销毁、无资源泄漏的结论是正确的,连接对应的JDBC资源、服务端会话资源都已经正常释放
- 官方高版本驱动直接将该警告抑制的处理逻辑,也印证了该异常属于连接关闭流程中的预期内异常,不存在隐性风险
- 该异常不会影响业务操作的正确性,也不会引发后续的连接创建、查询等操作的异常
可选优化方案
如果需要消除该日志警告,无需调整业务逻辑、也不需要关闭SSL,可以选择以下方案:
- 升级驱动到5.1分支的最新小版本,该版本已经修复了该警告打印的问题,且完全兼容MySQL 5.5、5.7版本,不需要修改任何业务代码
- 调整日志框架的配置,将
com.mysql.jdbc.MysqlIO类的日志级别调整为ERROR,过滤掉该类WARN日志
内容的提问来源于stack exchange,提问作者RTF
相关产品推荐
相关产品推荐

