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

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

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. 定时方法@Scheduled

通过&

Spring Boot中,@EnableScheduling注解用于开启定时任务功能。它可以被用于配置中,通常与@Configuration一起使用。该注解会自动扫描带有@Scheduled注解的方法,并将其设置为定时任务。通过在启动上添加@EnableScheduling注解,我们可以启用定时任务功能。例如,在启动MainApplication中添加@EnableScheduling注解,就可以开启定时任务功能。同时,我们还可以自定义线程池以及使用@Async和@EnableAsync注解来实现多线程间的异步调用。有关Spring Boot定时任务的更多信息,可以参考SpringBoot的官方文档或者相关的技术文章。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Spring 中 @EnableScheduling 实现 定时任务](https://blog.csdn.net/liuming690452074/article/details/124764904)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SpringBoot 注解@EnableScheduling定时任务详解](https://blog.csdn.net/qq_43649223/article/details/120437949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Java多线程之定时任务 以及 SpringBoot多线程实现定时任务——异步任务](https://download.csdn.net/download/suixinfeixiangfei/84560169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值