zoukankan      html  css  js  c++  java
  • spring中使用@schedule进行任务调度时遇到的坑

    spring是在开发中使用比较广泛的开发套件,开箱即用,很是方便,比如在开发定时任务时,只需要使用@Schedule就可以轻松配置,简直不要很方便,但是如果开发了很多定时任务,而且有的定时任务执行时间比较长,如果没有设置线程池,可能会出现定时任务执行时间和实际指定的时间不一致的问题,下面是我们遇到的问题

    1.问题现象

    开发了20多个定时任务,在测试环境执行都是正常,偏偏到了生产环境出现执行时间和实际指定时间不在同一节奏,导致执行错乱

    2.分析原因

    看了日志,所有定时任务日志都是同一个线程

     顿时发现问题所在,spring定时任务默认使用的是单线程调度的,所有很多定时任务排队执行,时间就错乱了,如果有任务卡死,那其他任务就别想执行了

    3.解决方式

    @Configuration
    @EnableAsync
    public class ScheduleConfig {
        @Bean
        public TaskScheduler taskScheduler() {
            ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); //计划任务线程池,每来一个任务创一个线程,直至线程池满
            taskScheduler.setPoolSize(10);
            return taskScheduler;
        }
    }

    创建一个线程池,这样调度任务就会使用不同的线程去执行,相互影响就降低了

    百流积聚,江河是也;文若化风,可以砾石。
  • 相关阅读:
    MySQL 不同版本数据导入的问题
    利用 ps 命令查看进程的位置
    MySQL 重置 root 密码
    killall 中的 signal
    Kafka 的安装及启动
    TypeScript 中 Optional Chaining 和 Nullish Coalescing
    Redis 的使用
    TypeScript 中限制对象键名的取值范围
    React17 使用 JSX 的情况下无须再显式导入 React
    使用 golang 获取远程地址视频的时间
  • 原文地址:https://www.cnblogs.com/qixing/p/14345302.html
Copyright © 2011-2022 走看看