项目中在使用线程跑定时任务时,遇到报错,"Could not open JPA EntityManager for transaction Caused by: org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection",报错信息看是数据库连接无法获取问题,但是在开发调试的过程中,并没有这个错误,只有在部署到机器,运行定时任务时,会抛出这样的异常;

自己定位无果后,求助于同组大哥,大哥在定位之后,发现是由于跑定时任务的那个模块代码中,在每次刷新操作的时候,会直接停止现有的线程任务,这样就会出现定时任务还没有完成的时候,线程被停止,这也就解释了为什么会报错说无法获取数据库连接,因为跑这个任务的线程被中止了,获取的数据库连接也自然被释放了;

于是大哥修改了定时任务的那个模块,增加了两个静态数组用来保存定时任务信息,以及中间的线程处理结果,每次刷新的时候,只有定时任务全部跑完,才会将定时任务中止,这样修改后,再部署到机器,运行定时任务时正常,不再报错。

posted on 2018-09-04 15:27  dbave  阅读(683)  评论(0编辑  收藏  举报