• Spring定时任务有时候会莫名奇妙的终止?


    最近在是使用Spring配置定时定时任务(基于xml配置使用spring自带的定时任务),一开始使用没什么问题当使用久了就会出现有些定时任务自动停止了。(关于如何使用以及如何它的原理是啥,这里不进行阐述)

    配置案例如下:

    <task:scheduled-tasks scheduler="scheduler">
        <task:scheduled ref="deleteMoniterTimer" method="delMoniterByHost" cron="0 0/5 * * * ?" />
        <task:scheduled ref="deleteAlarmAndLogTimer" method="deleteAlarmAndLog" cron="0 0 1 * * ?" />
        <task:scheduled ref="uapHeartBeatTimer" method="heartBeat" cron="0 */1 * * * ?" />
        <task:scheduled ref="uapUserChangeTimer" method="uapUserCheck" cron="0 0 * * * ?" />
        <task:scheduled ref="singleLoginClearTimer" method="singleLoginClear" cron="0 0 0 * * ?" />
        <task:scheduled ref="alarmJmsTimer" method="publishAlarmInfo" cron="*/5 * * * * ?" />
        <task:scheduled ref="deleteHistoryAnalysisTimer" method="deleteInvalidRecord" cron="0 0 0 * * ?" />
        <task:scheduled ref="collectExceptionAlarmTimer" method="judgeCollectException" cron="0 */1 * * * ?" />
    </task:scheduled-tasks>

    定时任务调度如下,从图中可以看出spring定时任务只开启一个线程去工作也就是串行工作。在实际项目中,其中collectException定时任务会无故终止且日志中也没有打印错误。当中也排查了内存不足的问题,后面仔细排查发现有定时调度任务出现阻塞导致线程终止。

    解决方法:配置线程池并配置具体线程数(根据自己有多少个定时调度任务会同时执行的情况下考虑设置)使得定时调度任务能并行执行且不会阻塞。配置如下(后面省略):

    <!-- 配置线程池并设置线程数的初始大小-->
    <task:scheduler id="scheduler" pool-size="20" /> 
    <task:scheduled-tasks scheduler="scheduler">
    ...

    产生调度日志如下(完美解决)。

     

  • 相关阅读:
    win10安装nodejs,修改全局依赖位置和环境变量配置
    JavaScript判断两个对象内容是否相等
    JS判断是否是数组
    Js判断值是否是NaN
    typeof方法重写(区分数组对象)
    JS实现图片懒加载
    输入url到展示页面过程发生了什么?
    html如何在服务端跑起来
    nuxt怎么打包
    如果scss引用了字体图标文件该怎么打包
  • 原文地址:https://www.cnblogs.com/yuanfy008/p/7921994.html
Copyright © 2020-2023  润新知