关闭与mysql和spring boot的ssl连接时的静音异常
Posted
技术标签:
【中文标题】关闭与mysql和spring boot的ssl连接时的静音异常【英文标题】:Silence Exceptions on closing ssl connection with mysql and spring boot 【发布时间】:2020-04-08 07:51:17 【问题描述】:我有 (spring boot) 集成测试,它使用 (mysql) 数据库的测试容器。当测试结束时(即使它们成功),我得到一个 ssl 异常(见下文)。我环顾四周,似乎这是mysql驱动程序的错误。我想将它们静音,以便在任何失败的情况下,我可以轻松地从日志中确定(而现在,我的大部分日志都来自这个误导性异常)有谁知道如何使这些日志静音(我不知道不想使用 ssl)。日志打印如下,供您参考:
2019-12-15 12:50:52.588 INFO 16171 --- [ Thread-3] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
2019-12-15 12:50:52.588 INFO 16171 --- [ Thread-3] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
Sun Dec 15 12:50:52 EST 2019 WARN: Caught while disconnecting...
EXCEPTION STACK TRACE:
** BEGIN NESTED EXCEPTION **
javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify
STACKTRACE:
javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133)
at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:307)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:263)
at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:254)
at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:645)
at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:624)
at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1319)
at com.mysql.cj.NativeSession.quit(NativeSession.java:182)
at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1750)
at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:720)
at com.zaxxer.hikari.pool.PoolBase.quietlyCloseConnection(PoolBase.java:135)
at com.zaxxer.hikari.pool.HikariPool.lambda$closeConnection$1(HikariPool.java:441)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
** END NESTED EXCEPTION **
Sun Dec 15 12:50:52 EST 2019 WARN: Caught while disconnecting...
EXCEPTION STACK TRACE:
** BEGIN NESTED EXCEPTION **
javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify
...
rest ommitted for brevity
谢谢
【问题讨论】:
【参考方案1】:好吧,你只需要添加
logging.level.<package_name>=ERROR
到你的 spring 配置属性 我会先尝试
logging.level.javax.net.ssl=ERROR
但如果它不起作用,请尝试使用不同的软件包。我在日志中看到的问题是,它看起来不是通过标准日志记录机制完成的,而是通过stderr
完成的。如果是这种情况并且属性方法不起作用 - 那么您需要为 stderr
指定您自己的 PrintStream
。这可以通过
System.setErr(new PrintStream(new OutputStream()
@Override
public void write(int i) throws IOException
//ignore
));
【讨论】:
谢谢@Alexey,你说得对,我可以覆盖标准错误输出(确保在课前输入,课后似乎是在输出已经打印之后)。谢谢以上是关于关闭与mysql和spring boot的ssl连接时的静音异常的主要内容,如果未能解决你的问题,请参考以下文章
通过 SSL 的 Spring Boot 远程 Mysql 连接
Spring Boot 使用 SSL 连接到 Postgresql
无法使用 Spring Boot 连接到具有多个 SSL 证书的多个 IBM MQ 通道
如何配置 Spring Boot 应用程序以在 MySQL 上使用 SSL/TLS?
如何使用 CassandraAutoConfiguration 在 Spring Boot 应用程序和 cassandra 之间配置 ssl?
Spring Boot + MySQL + Docker Compose - 无法使 Spring Boot 连接到 MySQL