Spring基础学习-任务调度TaskScheduler

本文详细介绍了Spring的TaskScheduler,包括Trigger的CronTrigger和PeriodicTrigger,TaskScheduler接口及其实现,以及如何使用Scheduled注解进行任务调度。讲解了Cron表达式、fixedRate与fixedDelay的区别,并提供了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

某些时候我们可能需要在某些固定的时间或者是间隔一定的时间连续执行一些任务,如每天凌晨自动跑一些批次/心跳检测等。Spring通过使用TaskScheduler来完成这些功能。

本文目录:

1 Trigger

先对在TaskScheduler中将会使用到Trigger对象进行分析。
Trigger接口用于计算任务的下次执行时间。它的接口定义如下:

public interface Trigger {
   
   

    /**
     * Determine the next execution time according to the given trigger context.
     * @param triggerContext context object encapsulating last execution times
     * and last completion time
     * @return the next execution time as defined by the trigger,
     * or {@code null} if the trigger won't fire anymore
     */
    @Nullable
    Date nextExecutionTime(TriggerContext triggerContext);

}

可见它仅提供了一个接口:nextExecutionTime来获取下次执行时间。
这个方法接收的参数为TriggerContext对象,它能够获取上次任务原本的计划时间/实际的执行时间以及实际的完成时间。

Trigger接口的实现包含以下两个:

1.1 CronTrigger

它通过Cron表达式来生成调度计划。
如:

scheduler.schedule(task, new CronTrigger("0 15 9-17 * * MON-FRI"));

以上表达式表示在工作日的9-17点之间,每隔15分钟执行一次;
关于Cron表达式的具体内容,在此不进行详述。

1.2 PeriodicTrigger

用于定期执行的Trigger;它有两种模式:

  • fixedRate:两次任务开始时间之间间隔指定时长
  • fixedDelay: 上一次任务的结束时间与下一次任务开始时间间隔指定时长

可见这两种情况的区别就在于,在决定下一次的执行计划时是否要考虑上次任务在什么时间执行完成。
默认情况下PeriodicTrigger使用了fixedDelay模式。
PeriodicTrigger提供以下参数来达成目的:

  • period: long类型,表示间隔时长,注意在fixedRate与fixedDelay两种模式下的不同含义
  • timeUnit: TimeUnit类型,表示间隔时长的单位,如毫秒等;默认是毫秒
  • initialDelay: long类型,表示启动任务后间隔多长时间开始执行第一次任务
  • fixedRate: boolean类型,表示是否是fixedRate,为True时是fixedRate,否则是fixedDelay,默认为False

2 TaskScheduler接口简介

2.1 接口简介

TaskScheduler用于对Runnable的任务进行调度,它包含有多种触发规则。默认的实现是ThreadPoolTaskScheduler。
它的主要包含的方法及说明如下:

public interface 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值