spring cloud 使用 @Scheduled注解形式的定时任务

本文介绍了如何在Spring Cloud中使用@EnableScheduling开启定时任务,以及@Scheduled注解的fixedRate、fixedDelay和cron三种参数的详细解释。fixedRate是从上一次方法开始执行算起,而fixedDelay则从上一次执行完毕开始算起。cron表达式用于复杂的时间配置,支持秒、分、小时、日期、月份、星期和年份等多个时间元素,允许指定增量、范围、列表和特殊字符如L、W和C等进行任务调度。

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

1\   在入口类 (***Application) 添加@EnableScheduling打开定时任务功能,  @EnableScheduling为开启计划任务支持;

2\   新建一个Java类添加@Component注解, 在需要做定时任务的函数上添加@Scheduled注解,支持fixedRate、cron和fixedDelay等参数;

   ① fixedRate  是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。 任务时长超过 fixedRate 时不会启动多个任务实例, 会在上次任务执行完后立即启动下一轮。除非这个 方法用 @Async 注解了,使得任务不在线程池中执行,而是每次创建新线程来执行。

  ② fixedDelay  是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次。

 ③ cron   这是一个时间表达式,可以通过简单的配置就能完成各种时间的配置;一个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                           , - * /

"*"字符代表所有可能的值
"/"字符用来指定数值的增量
"-"代表在指定的范围内触发,比如”25-45”代表从25秒开始触发到45秒结束触发,每隔1秒触发1次
"," 代表在指定的秒数触发,比如”0,15,45”代表0秒、15秒和45秒时触发任务
"?"字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”
"L" 字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写如果在“L”前有具体的内容,它就具有其他的含义了。例如:“6L”表示这个月的倒数第6天    注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题
"W" 字符代表着平日(Mon-Fri),并且仅能用于日域中。它用来指定离指定日的最近的一个平日。。
"C":代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如5C在日期字段中就相当于日历5日以后的第一天。1C在星期字段中相当于星期日后的第一天

例:

"0 0 0 * * ?" 每天0时触发任务
“30 * * * * ?” 每半分钟触发任务
“30 10 * * * ?” 每小时的10分30秒触发任务
“30 10 1 * * ?” 每天1点10分30秒触发任务
15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务
“15-45 * * * * ?” 15到45秒内,每秒都触发任务
“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次
“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次
“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务
“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务
“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务
“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务
“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务

Spring Cloud 提供了一个名为 Spring Cloud Task 的模块,可以用于实现定时任务。 在 Spring Cloud Task 中,你可以通过创建一个带有 `@Scheduled` 注解的方法来定义定时任务。该注解可以设置任务的执行时间、频率等。 首先,你需要在项目的依赖中添加 Spring Cloud Task 的引用。在 Maven 中,可以添加以下依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-task</artifactId> </dependency> ``` 接下来,在你的定时任务类中,可以使用 `@Scheduled` 注解来定义一个定时任务方法。例如: ```java @Component public class MyTask { @Scheduled(fixedDelay = 1000) // 每隔1秒执行一次任务 public void myScheduledTask() { // 执行任务逻辑 System.out.println("定时任务执行中..."); } } ``` 这样,当应用程序启动后,`myScheduledTask` 方法将会按照指定的频率被调用。 请注意,`@Scheduled` 注解还有其他的配置选项,如 `fixedRate`、`cron` 等,可以根据你的需求选择合适的配置。 另外,为了使 Spring Boot 应用启用定时任务功能,你还需要在启动类上添加 `@EnableScheduling` 注解,以启用 Spring定时任务支持: ```java @SpringBootApplication @EnableScheduling public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 这样,Spring Cloud Task 就可以帮助你实现定时任务了。希望能对你有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值