浅聊下Spring Task定时器的Cron表达式

前文:

        1、Spring Task 是 Spring 提供的轻量级定时任务工具,也就意味着不需要再添加第三方依赖了,相比其他第三方类库更加方便易用。

        2、spring task是spring 3.0以后推出的定时器类,可以把它当做一个轻量级的quartz。由于配置简单,功能齐全,在实际项目中经常会用到。spring task支持xml配置、注解配置、java配置三种方式。


注解配置的实现方式:

        第一步,新建配置类 SpringTaskConfig,并添加 @EnableScheduling注解开启 Spring Task。

@Configuration
@EnableScheduling
public class SpringTaskConfig {
}

  也可以不新建这个配置类,直接在主类上添加 @EnableScheduling 注解即可。

@SpringBootApplication
@EnableScheduling
public class CodingmoreSpringtaskApplication {

	public static void main(String[] args) {
		SpringApplication.run(CodingmoreSpringtaskApplication.class, args);
	}

}

        第二步,新建定时任务类 CronTask,使用 @Scheduled 注解注册 Cron 表达式执行定时任务。

@Slf4j
@Component
public class CronTask {
    @Scheduled(cron = "0/1 * * ? * ?")
    public void cron() {
        log.info("定时执行,时间{}", DateUtil.now());
    }
}

         第三步,启动服务器端,发现每隔一秒钟会打印一次日志,证明 Spring Task 的 cron 表达式形式已经起效了,如下图。


关于 Cron 表达式: 

        1、含义:Cron 这个词来源于希腊语 chronos,原意也就是时间。

示例说明
0 15 10 ? * *每天上午10:15执行任务
0 0 10,14,16 * * ?每天10 点、14 点、16 点执行任务
0 0 12 ? * 3每个星期三中午 12 点执行任务
0 15 10 15 * ?每月 15 日上午 10 点 15 执行任务

        2、Cron 的语法格式可以总结为:

英文:Seconds Minutes Hours DayofMonth Month DayofWeek

中文:秒 分 时 每月的第几天 月 每周的第几天

        3、每个时间元素的取值范围,以及可出现的特殊字符,如下表所示:

时间元素取值范围可出现的特殊字符
[0,59]*,-/
分钟[0,59]*,-/
小时[0,59]*,-/
日期[0,31]*,-/?LW
月份[1,12]*,-/
星期[1,7]*,-/?L#

         4、特殊字符的含义和示例,如下表所示:

特殊字符含义示例
*所有可能的值用来表示所有值,可以理解成所有的值都执行,也就是“每”的意思,比如在秒的位置上输入 * 就表示每秒都运行
,枚举的值可以用来逗号隔开的多个时间点的并集,比如在月的位置上输入1,2表示在1月和2月都要执行
-范围用来表示一个时间段,一个连续触发的范围,比如在秒的位置上输入10-30表示在10到30秒间每秒执行一次
/指定数值的增量分钟域中 0/15,就表示每隔 15 分钟执行一次
?不指定值它只用于周和日的域,避免周和日的冲突,用于周和日之间进行互斥。通常在周和日设置的一个值,另外一个用?表示不指定值。比如要在每月的1号触发一个动作,但忽略周几,我们可以这么设置成 0 0 0 1 * ?
L单词 Last 的首字母日期域和星期域支持,表示月的最后一天或者星期的最后一天
W除周末以外的工作日仅日期域支持
#每个月的第几个星期几仅星期域支持,4#2表示某月的第二个星期四

         5、例子:

*/5 * * * * ? 每隔 5 秒执行一次

0 */1 * * * ? 每隔 1 分钟执行一次

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 23 * * ? 每天 23 点执行一次

0 0 1 * * ? 每天凌晨 1 点执行一次

0 0 1 1 * ? 每月 1 日凌晨 1 点执行一次

0 0 23 L * ? 每月最后一天 23 点执行一次

0 0 1 ? * L 每周星期天凌晨 1 点执行一次

0 26,29,33 * * * ? 在 26 分、29 分、33 分执行一次

0 0 0,13,18,21 * * ? 每天的 0 点、13 点、18 点、21 点都执行一次

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 触发

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scheduled cron表达式是用于设置定时任务的一种语法格式。它由6个字段组成,分别表示秒、分钟、小时、日期、月份和星期。每个字段都可以设置具体的数值或者通配符来表示时间的触发条件。通过灵活的横向和纵向组合,cron表达式可以实现几乎任何你想要触发的时间点与周期。除了日期和星期可以使用"?"来实现互斥,其他占位符都要具有具体的时间含义,且依赖关系为:年->月->日期(星期)->小时->分钟->秒数。 例如,"*/6 * * * * ?"表示每隔6秒触发一次定时任务。在Java中,你可以使用@Scheduled注解来设置cron表达式,如下所示: @Component public class ScheduledTime { private Logger logger = LoggerFactory.getLogger(ScheduledTime.class); @Scheduled(cron="*/6 * * * * ?") private void timingScan() { // 在这里写实现代码 } } 这个例子中,使用@Scheduled注解的方法timingScan()会根据指定的cron表达式定时触发任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [@Scheduled() cron表达式详解](https://blog.csdn.net/qq_35144624/article/details/99696267)[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: 50%"] - *3* [Spring boot 定时器](https://blog.csdn.net/qinxu0611/article/details/104624529)[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: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值