如何抑制Wildfly 8服务器日志中JDBC资源未关闭的警告?
如何抑制Wildfly 8中未关闭Statement/ResultSet的警告?
我来帮你解决这个Wildfly 8里的日志警告问题,有几种办法可以抑制这类提示,不过得先提一句:从根源修复代码才是最佳方案,毕竟未关闭的Statement/ResultSet可能导致资源泄漏,但如果只是想暂时抑制日志里的警告,下面的方法可以试试:
方法一:调整日志记录器级别
Wildfly使用JBoss Logging框架,你可以直接修改服务器配置文件(standalone.xml或domain.xml),把触发警告的日志记录器级别调高,让WARN级别的信息不再输出。
找到配置中的<subsystem xmlns="urn:jboss:domain:logging:2.0">节点,添加以下配置:
<logger category="org.jboss.jca.adapters.jdbc.WrappedConnection"> <level name="ERROR"/> </logger>
这样这个日志记录器只会输出ERROR及以上级别的信息,那些未关闭语句的警告就不会出现在日志里了。
方法二:禁用数据源的语句追踪
Wildfly的JDBC适配器默认会追踪未关闭的Statement,你可以在数据源配置里关闭这个功能。
找到你应用使用的<datasource>配置节点,添加track-statements="false"属性:
<datasource jndi-name="java:jboss/datasources/YourDataSource" pool-name="YourDataSource" enabled="true" use-java-context="true" track-statements="false"> <!-- 你的数据源其他配置,比如driver-class、connection-url等 --> </datasource>
这个配置会直接关闭连接池对未关闭语句的追踪,自然也就不会触发警告了。
额外提醒:从代码层面彻底解决问题
虽然上面的方法能抑制警告,但资源泄漏的问题依然存在,长期运行可能导致连接池耗尽。推荐使用Java 7及以上的try-with-resources语句,它会自动帮你关闭Connection、Statement、ResultSet这些资源,不用手动写finally块:
try (Connection conn = yourDataSource.getConnection(); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM your_table"); ResultSet rs = stmt.executeQuery()) { // 处理查询结果的逻辑 } catch (SQLException e) { // 异常处理代码 }
这里的所有资源都会在try块执行完毕后自动关闭,从根源避免资源泄漏和对应的警告。
内容的提问来源于stack exchange,提问作者Anirban
相关产品推荐
相关产品推荐

