Spring Boot集成Schedule任务调度

一、前言:微服务应用中可能会涉及到多个定时任务跨服务同时执行,这里就会涉及到线程生命周期和一致性问题,任务调度器本质上还是单独启动的线程执行,但是生命周期不会随应用的停止而销毁,所以本篇内容只涉及当前应用执行定时任务

1、配置启动类

2、cron表达式:(cron = "0 0 0 * * ?")

一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素

  0-59   , - * /
  0-59   , - * /
小时   0-23   , - * /
日期   1-31   , - * ? / L W C
月份   1-12 或者 JAN-DEC   , - * /
星期   1-7 或者 SUN-SAT   , - * ? / L C #
年(可选)   留空, 1970-2099   , - * /

3、默认情况下容器创建的时候会创建单线程池执行任务调度、这样对于我们的多任务调度可能会是致命的,当多个任务并发(或需要在同一时间)执行时,任务调度器就会出现时间漂移,任务执行时间将不确定

自定义线程池的方式

@Configuration

public class ScheduleConfig implements SchedulingConfigurer {

    @Override

    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

        taskRegistrar.setScheduler(taskExecutor());

    }

     

    @Bean(destroyMethod="shutdown")

    public Executor taskExecutor() {

        return Executors.newScheduledThreadPool(20);

    }

}

猜你喜欢

转载自my.oschina.net/wubiaowpBlogShare/blog/1824874