课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > java教程 > spring定时器任务执行问题排查
  • spring定时器任务执行问题排查

    发布:昆明Java培训      来源:博客园      时间:2016-11-09

  • 昆明达内Java培训的老师最近发现个生产问题,定时器任务某些任务没有及时执行。经过研究排查发现spring定时器任务scheduled-tasks默认配置是单线程串行执行的,这就造成了若某个任务执行时间过长,其他任务一直在排队,业务 辑没有及时处理的问题。

    如下是scheduled定义了3个任务。

    <task:scheduled-tasks >

    <task:scheduled ref="myTask1" method="run" cron="0 0/59 10-23 * * ?"/>

    <task:scheduled ref="myTask2" method="run" cron="0/10 * * * * ?"/>

    <task:scheduled ref="myTask3" method="run" cron="0/10 * * * * ?"/>

    </task:scheduled-tasks>

    查看该任务17点的执行日志(task名字已修改)

    zgrep -e '2016-10-28 17:' channel-task.log.2016-10-28.log.gz | grep -e 'MyTask2'

    2016-10-28 17:14:25,002 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] start task >> .MyTask2@186d315

    2016-10-28 17:14:35,980 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] complete task MyTask2@186d315

    2016-10-28 17:14:40,002 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] start task >> .MyTask2@186d315

    2016-10-28 17:14:50,681 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] complete task .MyTask2@186d315

    2016-10-28 17:14:55,003 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] start task >> .MyTask2@186d315

    2016-10-28 17:15:05,613 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] complete task MyTask2@186d315

    2016-10-28 17:20:35,246 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] start task >> .MyTask2@186d315

    2016-10-28 17:20:46,051 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] complete task .MyTask2@186d315

    2016-10-28 17:20:50,003 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] start task >> .MyTask2@186d315

    2016-10-28 17:21:00,974 INFO [pool-8-thread-1 - ] task.AbstractTask - [TASK] complete task MyTask2@186d315

    MyTask2每10秒钟执行一次,但是在17:15:05到17:20:35之间,5分钟内定时任务没有执行

    执行命令zgrep -e '2016-10-28 17:1' task.log.2016-10-28.log.gz (当天17点10几分发生的日志)

    然后在查询日志发现,这5分钟之内有大量的日志在执行

    2016-10-28 17:17:20,202 INFO [pool-8-thread-1 - ] task.MyTask3 - compare query order[ 211621610280893418 ]

    2016-10-28 17:17:20,477 INFO [pool-8-thread-1 - ] task.MyTask3 - compare query order[ 211621610280893401 ]

    2016-10-28 17:17:20,731 INFO [pool-8-thread-1 - ] task.MyTask3 - compare query order[ 211621610280893402 ]

    .........中间省略n条日志

    2016-10-28 17:19:59,752 INFO [pool-8-thread-1 - ] task.MyTask3 - compare query order[ 211621610280894049 ]

    通过过以上日志可以看出,该线程[pool-8-thread-1 - ]一直在处理MyTask3任务,此时断定task:scheduled配置默认是单线程串行的,

    <task:scheduler id="scheduler" pool-size="3" />

    <task:scheduled-tasks scheduler="scheduler" >

    <task:scheduled ref="myTask1" method="run" cron="0 0/59 11-23 * * ?"/>

    <task:scheduled ref="myTask2" method="run" cron="0/10 * * * * ?"/>

    <task:scheduled ref="myTask3" method="run" cron="0/10 * * * * ?"/>

    </task:scheduled-tasks>

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:在cmd窗口下运行Java程序时无法找到主类

下一篇:AVL树插入操作实现

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56