SpringBoot通过@Scheduled实现定时任务

Spring自带的定时任务系统,使用注解时必须指定任意一个参数(属性):cron、fixedDelay或fixedRate;

1. 启动类添加开启注解

@EnableScheduling

2. cron参数

/**
* cron 一共可以有7个参数 以空格分开 其中年不是必须参数
* [秒] [分] [小时] [日] [月] [周] [年]
*/
@Scheduled(cron ="0 0 0 * * * ?")
public void testScheduledCron(){
}

序号说明取值范围允许的通配符
1[0, 59]* , - /
2分钟[0, 59]* , - /
3小时[0, 23]* , - /
4日期[1, 31]* , - / ? L W
5[1, 12]或[JAN, DEC]* , - /
6星期[1,7]或[MON, SUN]

* , - / ? L #

7[1970,2099]* , - /

常用通配符:

序号特殊字符描述样例
1*所有可能的值如在分钟的位置配置*,表示每一分钟都生效
2,枚举值表示对应的数据,如分钟位置配置10,20,30,表示在某点的10分、20分和30分执行
3-范围间隔值1,左右的数据表示上界和下界,如分钟位置配置:10-20,表示某点10分和20分之间,每1分钟执行
4/增量左侧数据表示起始值,右侧数据表示增量,分钟位置配置:3/10,表示从第一个间隔3分钟后,每10分钟执行,秒位置:2/10,表示从第一个2秒后开始,每10秒执行
5?不指定在日期或星期中使用,为避免冲突,将另一个位置配置?
6LLast,最后一个日期位置使用L表示最后一天,星期位置使用L表示最后一个星期的最后一天
7W除周末以外的有效工作日日期位置就近原则,如果5W,5日在为星期六,则在4日执行,如果5日是星期日,则在星期一执行,如果5日在周一~周五,则在5日当天执行
8#确定每个月第几个星期几,仅支持星期星期位置,4#2表示某月的第二个星期四

示例:

每天凌晨零点执行

@Scheduled(cron ="0 0 0 * * * ?")

每隔五分钟执行

@Scheduled(cron ="0 */5 0 * * * ?")
cron描述
0/5 * * * * ?每5秒执行一次
0 0/2 * * * ?每两分钟执行一次
0 2 3 1 * ?每月1日3点2分执行一次
0 2 3 1 1-3 ?1月到3月的:1日3点2分执行一次
0 0 2,3,4,5 * * ?每天2点、3点、4点和5点执行一次
0 10 2 * * ?每天2:10分执行一次
0 0-5 14,16 * * ?每天14:00到14:55和16:00到16:55每5分钟执行一次
0 10 10 L * ?每月最后一天的10:10执行一次
0 10 10 5W * ?每月的工作日5日10:10分执行,如果5日为周六,则往前退一天(星期五),4日10:10执行,如果5日为星期日,则往后推一天(星期一),6日10:10日执行
0 10 10 ?* 4#2每月的第二个星期四10:10执行一次

0/2 * * * * ?   表示每2秒 执行任务

0 0/2 * * * ?    表示每2分钟 执行任务

0 0 2 1 * ?   表示在每月的1日的凌晨2点调整任务

0 15 10 ? * MON-FRI   表示周一到周五每天上午10:15执行作业

0 15 10 ? 6L 2002-2006   表示2002-2006年的每个月的最后一个星期五上午10:15执行作

0 0 10,14,16 * * ?   每天上午10点,下午2点,4点 

0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时 

0 0 12 ? * WED    表示每个星期三中午12点 

0 0 12 * * ?   每天中午12点触发 

0 15 10 ? * *    每天上午10:15触发 

0 15 10 * * ?     每天上午10:15触发 

0 15 10 * * ?    每天上午10:15触发 

0 15 10 * * ? 2005    2005年的每天上午10:15触发 

0 * 14 * * ?     在每天下午2点到下午2:59期间的每1分钟触发 

0 0/5 14 * * ?    在每天下午2点到下午2:55期间的每5分钟触发 

0 0/5 14,18 * * ?     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 

0 0-5 14 * * ?    在每天下午2点到下午2:05期间的每1分钟触发 

0 10,44 14 ? 3 WED    每年三月的星期三的下午2:10和2:44触发 

0 15 10 ? * MON-FRI    周一至周五的上午10:15触发 

0 15 10 15 * ?    每月15日上午10:15触发 

0 15 10 L * ?    每月最后一日的上午10:15触发 

0 15 10 ? * 6L    每月的最后一个星期五上午10:15触发 

0 15 10 ? * 6L 2002-2005   2002年至2005年的每月的最后一个星期五上午10:15触发 

0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发

 在线生成cron:在线Cron表达式生成器 (qqe2.com)

3. zone参数

zone能够指定获取的时区,默认是空,表示使用服务器所在时区,比如Asia/BeiJingi或者Asia/Shanghai。

4. fixedDelay参数

fixedDelay表示上次调用结束后与下次调用之间的固定时间,单位是毫秒。

 @Scheduled(fixedDelay= 3000) //表示距离上次调用结束后三秒再执行

5. fixedDelayString参数

与fixedDelay是几乎一样的,唯一的差异是fixedDelayString是支持占位符的。

 6. fixedRate

fixedRate表示多久执行一次,单位是毫秒。与cron的/通配符用法相似;

 @Scheduled(fixedRate= 3000) // 表示每三秒执行一次

7. fixedRateString 

相比fixedRate支持占位符

8. initialDelay

表示第一次延迟多少毫秒执行,单位是毫秒

@Scheduled(initialDelay= 3000)

表示第一次执行时,延迟3秒执行

9. initialDelayString

initialDelay的升级,支持占位符。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个使用 `@Scheduled` 注解实现定时任务Spring Boot 示例代码: 首先,在 Spring Boot 项目的 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> ``` 然后,在一个 Spring BootJava 类中添加以下代码: ```java import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class ScheduledTasks { @Scheduled(fixedRate = 5000) // 每隔 5 秒执行一次 public void task1() { System.out.println("Task1: " + System.currentTimeMillis()); } @Scheduled(cron = "0 0/1 * * * ?") // 每分钟执行一次 public void task2() { System.out.println("Task2: " + System.currentTimeMillis()); } } ``` 上面代码中,我们使用 `@Scheduled` 注解来实现两个定时任务,一个是每隔 5 秒执行一次,另一个是每分钟执行一次。 其中,`@Scheduled` 注解有两个常用的属性: - `fixedRate`:表示任务执行的间隔时间,单位为毫秒。 - `cron`:表示基于 Cron 表达式的定时任务配置,格式为 `second minute hour dayOfMonth month dayOfWeek year`。 最后,启动 Spring Boot 应用程序,即可看到定时任务在后台自动执行的输出结果。 注意:在 Spring Boot 应用程序中使用 `@Scheduled` 注解时,需要在应用程序主类上添加 `@EnableScheduling` 注解,以启用定时任务功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今晚哒老虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值