Spring Boot系列三 Spring @EnableScheduling 定时任务用法总结

本文详细介绍了Spring Boot中使用@Scheduled进行定时任务的原理,包括TaskScheduler的两种实现方式TimerManagerTaskScheduler和ThreadPoolTaskScheduler,以及Trigger在配置任务执行时间中的作用。此外,还讲解了@Scheduled注解的使用方法,如fixedDelay、fixedRate、initialDelay和cron表达式,并提供了启动定时任务的不同方式,包括注解和XML配置。最后提到了如何自定义配置线程池。

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

1. 原理

1.1 TaskScheduler

TaskScheduler是spring的定时任务使用的线程池的关键类

public interface TaskScheduler {
    // 通过Trigger执行任务
    ScheduledFuture schedule(Runnable task, Trigger trigger);
// 指定时间执行任务
    ScheduledFuture schedule(Runnable task, Date startTime);
// 指定在指定时间后,循环周期执行任务
    ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period);
    //  循环周期执行任务
    ScheduledFuture scheduleAtFixedRate(Runnable task, long period);
    // 延迟N时间,在指定日期执行
    ScheduledFuture scheduleWithFixedDelay(Runnable task, Date startTime, long delay);
    ScheduledFuture scheduleWithFixedDelay(Runnable task, long delay);
}

TaskScheduler有两种实现方式:
- TimerManagerTaskScheduler:使用外部对象管理线程池,如 CommonJ TimerManager,适用于多个进程共享线程池
- ThreadPoolTaskScheduler: 如果仅仅在同一进程管理线程池,则推荐使用此对象。它实际使用Java自我的ScheduledExecutorService管理线程池

1.2 Trigger

Trigger是定时任务配置的关键类,配置方法的下次执行时间

public interface Trigger {
    Date nextExecutionTime(TriggerContext triggerContext);
}

方法里的参数TriggerContext是封装了任务最后执行的时间和最后执行完毕的时间

public interface TriggerContext {
    Date lastScheduledExecutionTime();
    Date lastActualExecutionTime();
    Date lastCompletionTime();
}

TriggerContext默认的实现是SimpleTriggerContext,看源码实现非常简单

Trigger的实现类:
- CronTrigger:使用cron表达式定义任务执行时机
如:scheduler.schedule(task, new CronTrigger("0 15 9-17 * * MON-FRI"));
- PeriodicTrigger:通过“fixed period,”,“initial delay value”,“boolean to indicate whether the period should be interpreted as a fixed-rate or a fixed-delay”3个参数配置任务执行的时机

2. 定时方法@Sc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值