druid 没有有效的配置自动回收连接removeAbandoned
及removeAbandonedTimeout
。导致连接在在使用之前就被回收了。
根据异常显示: statement已经关闭了,却还想使用
关闭原因
- 手动关闭,调用了
close()
方法 - 创建了
PreparedStatement
没有及时用。然后数据库连接收回,自动关闭了statement
解决方法
- 手动关闭
找找代码里面有没有关闭的代码。导致关闭之后还在使用 - 数据库连接收回
检查是否配置removeAbandoned
为true
且removeAbandonedTimeout
是否小于了业务最大时长
参考连接:druid连接池配置参数
druid回收连接导致statement is closed
附异常信息:
java.sql.SQLException: statement is closed
at com.alibaba.druid.pool.DruidPooledStatement.checkOpen(DruidPooledStatement.java:181)
at com.alibaba.druid.pool.DruidPooledPreparedStatement.setString(DruidPooledPreparedStatement.java:366)
at zm.PreparedStatement.setString(PreparedStatement.java:24)
at zm.WinswJava.SwProcSalary.timer_proccess(SwProcSalary.java:121)
at zm.base_daemon.proc_statis_salary.timer_run(proc_statis_salary.java:35)
at zm.base_daemon.proc_statis_salary$1.run(proc_statis_salary.java:25)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。