@红薯 你好,想跟你请教个问题:你好,我在jfinal中写了一个定时器,mysql数据库,请教哈为何总报错啊?Exception in thread "Timer-3" com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: com.mchange.v2.c3p0.ComboPooledDataSource [ java.beans.IntrospectionException: java.lang.reflect.InvocationTargetException [numThreadsAwaitingCheckoutDefaultUser] ] has been closed() -- you can no longer use it.
at com.jfinal.plugin.activerecord.Model.find(Model.java:424)
at com.jfinal.plugin.activerecord.Model.findFirst(Model.java:462)
at com.hikvision.sys.config.ParaConfigService.findByKey(ParaConfigService.java:28)
at com.hikvision.sys.config.ParaConfigService.getValueByKey(ParaConfigService.java:36)
at com.hikvision.recordTemplate.TimeComputer.getRateFromDb(TimeComputer.java:44)
at com.hikvision.timer.TaskTimer$1.run(TaskTimer.java:63)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)
Caused by: java.sql.SQLException: com.mchange.v2.c3p0.ComboPooledDataSource [ java.beans.IntrospectionException: java.lang.reflect.InvocationTargetException [numThreadsAwaitingCheckoutDefaultUser] ] has been closed() -- you can no longer use it.
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.assertCpds(AbstractPoolBackedDataSource.java:447)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getPoolManager(AbstractPoolBackedDataSource.java:459)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
at com.jfinal.plugin.activerecord.DbKit.getConnection(DbKit.java:129)
at com.jfinal.plugin.activerecord.Model.find(Model.java:421)
... 7 more
这个主要是连接池中连接有效时间和数据那边的连接timeout配置之间关系的问题。
“关系的问题”?太隐晦了!但超过timeout了之后,连接池不会返回一个有效的链接么?还会使用之前的链接?我定时器设置的是30分钟,jfinal中的C3p0Plugin的privateintmaxIdleTime=20;?你是不是在代码里手动close()连接了,c3p0连接池会自动回收不用的闲置链接,此时如果你又手动关闭链接,就容易产生以上问题。我现在也用定时器做业务处理,同样遇到这个问题,兄弟你是咋解决的啊?我放到Thread里面还是有这个问题这个问题是在开发前期的时候偶尔会发生,也没找出什么原因,当时考虑的是数据库连接过多导致的,所以修改了业务逻辑,使用Thread,并对任务进行了排队,后来就没再出现这个问题了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。