记一次数据池连接不释放的问题

项目背景:elastic job(底层是quartz)
由于esjob中是通过新建线程来执行任务的,所以不能加载为spring bean,因此任务内部通过实现ApplicationContextAware的方式来获取spring bean,问题就出现在这里了


1.png

这个任务每分钟跑一次,然后发现数据库连接池中的逻辑开启越来越多,逻辑关闭远小于逻辑开启,一段时间后就无连接可用了,很明显该现象是因为连接没有关闭,连接没有关闭是因为事务没有提交,但一直以来都是这样使用的,不需要手动提交,为什么这里会出问题呢?怀疑是数据库问题(虽然可能性不大),查看后mysql是自动提交的,然后又看了下druid连接池,也是自动提交的,那为什么这里的事务不提交呢 - -
看了半天后才发现,tmd我没有用到事务啊,之前的方法都是@Transactional管理的,方法开始前会开启事务,结束后会commit或rollback,连接关闭,所以赶紧地把任务抽取成独立方法,加上注解,问题解决

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容