使用 mysql 和 spring 引导关闭 ssl 连接时的静音异常
Silence Exceptions on closing ssl connection with mysql and spring boot
我有 (spring 引导) 集成测试,该测试将测试容器用于 (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(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
谢谢
嗯,你只需要添加
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
}
}));
我有 (spring 引导) 集成测试,该测试将测试容器用于 (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(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
谢谢
嗯,你只需要添加
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
}
}));