Spring TaskScheduler使用指南

Spring TaskScheduler

本文以SpringBoot2.7.3 版本来讲解自动装配TaskScheduler,Spring TaskScheduler 是在Jdk
ScheduledThreadPoolExecutor的基础上进行的扩展,默认调度是阻塞的话,如果某一个task未执行,下一个调度执行就会被推迟。

相关注解

注解说明
@EnableScheduling开启spring 调度
@Scheduled定义task 调度周期配置,只能作用于方法上,指定crontab 表达式、指定固定周期、支持延迟
@Schedules支持定义多个@Scheduled

关键类

在这里插入图片描述

实现task被调度有哪些方式

  • 注解方式
    通过@Scheduled或者@Schedules来实现task周期性执行
  • 编程方式
    实现SchedulingConfigurer类,实现configureTasks

demo

  • 注解方式
@Configuration(proxyBeanMethods = false)
public class CustomerTask {
    @Scheduled(fixedRate = 1, timeUnit = TimeUnit.SECONDS)
    @Async
    public void doCustomerTask() {
        System.out.println(Thread.currentThread().getName() + " do customer task");
    }

    @Schedules(value = {@Scheduled(cron = "*/10 * * * * MON-FRI")})
    @Async
    //任务执行周期是10秒一次,但是任务执行耗时是大于10,由于ScheduledThreadPoolExecutor调度使用阻塞队列,所以任务将会被推迟执行
    public void doCustomerTask1() throws InterruptedException {
        System.out.println(new Date() + "do customer task1 start");
        TimeUnit.SECONDS.sleep(11);
        System.out.println(Thread.currentThread().getName() + "do customer task1");
        System.out.println(new Date() + "do customer task1 end");
    }
}
  • 编程方式
/**
 * 通过编程方式创建task
 */
@Configuration(proxyBeanMethods = false)
public class MySchedulingConfigurer implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        Runnable runnable = () -> {
            System.out.println(new Date() + Thread.currentThread().getName() + "  configureTasks ");
        };
        taskRegistrar.addFixedDelayTask(new IntervalTask(runnable, 1000 * 11, 0));

        taskRegistrar.addFixedDelayTask(new IntervalTask(runnable, 1000 * 11, 0));

        taskRegistrar.addTriggerTask(runnable, new PeriodicTrigger(5, TimeUnit.SECONDS));

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值