美文网首页
转,定时任务不释放连接

转,定时任务不释放连接

作者: yahzon | 来源:发表于2019-01-02 14:08 被阅读11次

https://www.jianshu.com/p/537c39bad234

最近在一个项目中使用spring的scheduling执行定时任务。简化一下需求,定时进行http请求,把请求的结果放入数据库,这里数据库连接使用c3p0连接池。
问题的描述:
执行了一段时间后,定时任务就停止了。日志输出停留在了某个时间点。查看java进程并没有挂掉。
问题查找:
通过最后的日志打印结束的位置是在获取数据库连接的地方停住了,原因应该就是无法获取连接。但为什么没有连接超时的异常。
看了一下c3p0的配置,发现spring中关于datasource的
<property name="checkoutTimeout" value="${c3p0.oa.checkoutTimeout}" />

这个配置注释了,这个配置就是获得连接的超时时间,如果超过这个时间,会抛出SQLException异常。如果没有这个超时配置,获取不到连接就会一直等待连接。
获取不到连接意味着c3p0连接池中的连接全部耗尽,定时任务执行完后,并没有把连接还给连接池,每次定时任务都从连接池获取新的连接,直至连接池达到最大连接数。
问题解决:
spring的scheduling使用线程池来执行定时任务的,线程是不会销毁的,线程从连接池获取连接后,执行任务,定时任务执行完成后,线程没有销毁,连接也就没有返回连接池。下次再次执行任务时,又从连接池中获取新的连接。这样最终把连接池的连接都耗尽了。
解决方法:
1.在任务执行完成后,主动关闭连接。而不是等待连接池回收连接。
2.开启一个新线程执行任务,新线程执行完毕后,线程会销毁,连接也会关闭。
总结:
使用线程池中的线程执行数据库操作时,如果是从连接池中获取连接的话,一定要关闭连接,否则会出现线程不销毁,连接就一直被占着,最终把连接池的连接耗光的情况。

作者:可乐爱上咖啡
链接:https://www.jianshu.com/p/537c39bad234
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

  • 转,定时任务不释放连接

    https://www.jianshu.com/p/537c39bad234 最近在一个项目中使用spring的s...

  • 转定时任务验证

    在线定时任务验证 http://cron.qqe2.com

  • TCP 的连接及释放(转)

    1、引言 TCP 这段看过好几遍,老是记不住,没办法找工作涉及到网络编程这块,各种问 TCP 。今天好好整理一下握...

  • GCD定时器

    创建GCD定时器 注意:默认创建的定时器对象需要强引用保住它的命,在任务执行中不被释放 定时器操作函数 dispa...

  • SpringBoot —— 多线程定时任务的实现(注解配置、ta

    前言 项目常常用到定时任务,在某个特定的时间,程序会自主触发去执行一些机械重复的工作,例如定时发送邮件、定时释放数...

  • rabbitmq延时队列应用

    rabbitmq延时队列(实现定时任务) 场景 比如未付款订单,超过一定时间后,系统自动取消订单并释放占有物品。 ...

  • Dnmp环境添加定时任务

    利用Dock环境搭建lnmp,有些业务需用使用到cron定时任务,在添加定时任务的时候,定时任务不执行的坑点分析。...

  • 210417:定时任务未生效-Java 正则表达式-解决IDEA

    一. 定时任务未生效 @Scheduled不生效了:有一天我的定时任务突然不执行了 可能原因 任务是懒加载的,调用...

  • celery with rabbitmq Control com

    使用 celery 处理定时任务和异步任务的时候,出现与 rabbitmq 连接中断的问题。具体异常如下: 查看对...

  • 2019-07-31定时任务

    定时任务 定时任务实现方法 系统默认定时任务 用户自定义设置定时任务 定时任务配置文件 定时任务启动 定时任务样例...

网友评论

      本文标题:转,定时任务不释放连接

      本文链接:https://www.haomeiwen.com/subject/mfjzlqtx.html