返回顶部
首页 > 资讯 > 精选 >@Scheduled参数及cron表达式是什么
  • 819
分享到

@Scheduled参数及cron表达式是什么

2023-06-22 05:06:28 819人浏览 安东尼
摘要

本篇内容主要讲解“@Scheduled参数及cron表达式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“@Scheduled参数及cron表达式是什么”吧!@Scheduled参数及cro

本篇内容主要讲解“@Scheduled参数及cron表达式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“@Scheduled参数及cron表达式是什么”吧!

@Scheduled参数及cron表达式解释

@Scheduled支持以下8个参数

  • cron:表达式,指定任务在特定时间执行;

  • fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms;

  • fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;

  • fixedRate:表示按一定的频率执行任务,即每次开始执行的时间间隔一致,参数类型为long,单位ms;

  • fixedRateString:与fixedRate的含义一样,只是将参数类型变为String;

  • initialDelay:表示延迟多久再第一次执行任务,参数类型为long,单位ms;

  • initialDelayString:与initialDelay的含义一样,只是将参数类型变为String;

  • zone:时区,默认为当前时区。

cron表达式是一个字符串,以空格分开共6个域

  • [秒] [分] [时] [日] [月] [周]

  • spring自带的定时任务cron表达式不支持年

如图:

@Scheduled参数及cron表达式是什么

上图类中有如下源代码:

private void parse(String expression) throws IllegalArgumentException {String[] fields = StringUtils.tokenizeToStringArray(expression, " ");if (!areValidCronFields(fields)) {throw new IllegalArgumentException(String.fORMat("Cron expression must consist of 6 fields (found %d in \"%s\")", fields.length, expression));}doParse(fields);}private static boolean areValidCronFields(String[] fields) {return (fields != null && fields.length == 6);}

代码中expression参数即cron表达式,所以在spring自带的定时任务中正确的cron表达式只能是6个域,否则会抛出IllegalArgumentException提示:Cron expression must consist of 6 fields(cron表达式必须由6个域组成)。

必填允许值允许的通配符
秒(seconds)0-59整数, - * /
分(minutes)0-59整数, - * /
时(hours)0-23整数, - * /
日(daysOfMonth)1-31整数(需要考虑月的天数), - * ? / L W
月(months)1-12整数 或 JAN-DEC, - * /
周 (daysOfWeek)1-7整数 或 SUN-SAT, - * ? / L #

通配符说明

  • *:表示匹配该域的任意值。在minutes域使用 * 表示每分钟。在months里表示每个月。在daysOfWeek域表示一周的每一天。

  • ?:只能用在daysofMonth和daysofWeek两个域,表示不指定值,当两个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为 ?。因为daysofMonth和daysofWeek会相互影响。例如想在每月的2号触发调度,不管2号是周几,则只能使用如下写法:0 0 0 2 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管周几都会触发。

  • -:表示范围。例如在minutes域使用5-20,表示从5分到20分钟每分钟触发一次

  • /:表示起始时间开始触发,然后每隔固定时间触发一次。例如在minutes域使用5/20,则意味着从当前小时的第5分钟开每20分钟触发一次。

  • ,:表示列出枚举值。例如:在minutes域使用5,20,则意味着在5分和20分时各触发一次。

  • L:表示最后,是单词“last”的缩写,只能出现在daysofWeek和dayofMonth域。在daysofWeek域使用5L意思是在指定月的最后的一个星期四触发。在dayofMonth域使用5L或者FRIL意思是在指定月的倒数第5天触发。在使用L参数时,不要指定列表或范围。

  • W:表示有效工作日(周一到周五),只能出现在daysofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在daysofMonth使用5W,如果5号是周六,则将在最近的工作日周五,即4号触发。如果5号是周日,则在6日(周一)触发。如果5日在星期一到星期五中的一天,则就在5日触发。另外,W的最近寻找不会跨过月份 。

  • LW:这两个字符可以连用,表示指定月的最后一个工作日。

  • #:用于确定每个月第几个周几,只能出现在daysofMonth域。例如在4#2,表示某月的第二个周三。

常用表达式示例

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

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

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

  • 0 15 10 ? * MON-FRI 表示周一到周五每天上午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 * 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-WED,SAT 周一至周三和周六的上午10:15触发

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

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

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

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

@Scheduled 定时任务总结

@Scheduled

作用:spring定时器(定时执行一次或定时轮询执行一段代码)

使用场景:注解在方法上

参数说明:常用参数

@Scheduled 参数说明

String cron:cron表达式定义了方法执行的时间规则(网上对这个的说明很多就不墨迹了)

生成器工具地址-Http://cron.qqe2.com/

Long fixedDelay:定时任务每隔多久执行一次,单位是毫秒,上一次任务结束后开始计算下次执行的时间。

例子:@Scheduled(fixedDelay = 1000 * 10) //10秒发送一次

······················scheduled1开始执行·······················2018-07-27 14:00:00

······················scheduled1结束执行·······················2018-07-27 14:00:05

······················scheduled2开始执行·······················2018-07-27 14:00:15

······················scheduled2结束执行·······················2018-07-27 14:00:20

······················scheduled3开始执行·······················2018-07-27 14:00:30

······················scheduled3结束执行·······················2018-07-27 14:00:35

  • Long fixedRate:与fixedDelay一样表示定时任务的执行时间间隔,不同的是fixedRate的不会受到上一次任务结束时间的影响

例子:@Scheduled(fixedRate = 1000 * 10) //10秒发送一次

······················scheduled1开始执行·······················2018-07-27 14:00:00

······················scheduled1结束执行·······················2018-07-27 14:00:05

······················scheduled2开始执行·······················2018-07-27 14:00:10

······················scheduled2结束执行·······················2018-07-27 14:00:15

······················scheduled3开始执行·······················2018-07-27 14:00:20

······················scheduled3结束执行·······················2018-07-27 14:00:25

  • Long initialDelay项目启动后不马上执行定时器,根据initialDelay的值延时执行。

注意事项

1.定时器的参数有两种写法是用cron表达式,或者使用fixedDelay、fixedRate等参数直接配置

需要注意的是 使用cron表达式的方法,在项目首次启动后不会直接运行,而是等到执行周期才会执行

而使用第二种方式的定时器方法,在项目启动成功后会马上开始执行一次,再按照时间周期执行。

测试说明:

使用第一种配置方式,项目启动后方法不会执行,而是等到执行周期到了才会执行方法

@Scheduled参数及cron表达式是什么

使用第二种参数方式的方法,项目启动成功后马上执行了一次

@Scheduled参数及cron表达式是什么

2.定时器默认为单线程,所以如果项目中使用多个定时器要配置线程池

注意这里的@EnableScheduling,使用它来开启定时器注解

@Configuration@EnableSchedulingpublic class SchedulinGConfig implements SchedulingConfigurer { @Overridepublic void configureTasks(ScheduledTaskReGIStrar taskRegistrar) {taskRegistrar.setScheduler(taskExecutor());} @Bean(destroyMethod="shutdown")    public Executor taskExecutor() {        return Executors.newScheduledThreadPool(5 ,new ThreadFactory() {        private final AtomicLong counter = new AtomicLong();@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r);thread.setName("test-scheduler-" + counter.incrementAndGet());return thread;}});    }}

到此,相信大家对“@Scheduled参数及cron表达式是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: @Scheduled参数及cron表达式是什么

本文链接: https://lsjlt.com/news/302614.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • @Scheduled参数及cron表达式是什么
    本篇内容主要讲解“@Scheduled参数及cron表达式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“@Scheduled参数及cron表达式是什么”吧!@Scheduled参数及cro...
    99+
    2023-06-22
  • 关于@Scheduled参数及cron表达式解释
    目录@Scheduled参数及cron表达式解释@Scheduled支持以下8个参数cron表达式是一个字符串,以空格分开共6个域通配符说明常用表达式示例@Scheduled 定时任...
    99+
    2024-04-02
  • Spring的@Scheduled 如何动态更新cron表达式
    常见的本地定时写法如下: @Scheduled(cron = "0/5 * * * * ?") private void test() { lo...
    99+
    2024-04-02
  • cron表达式的作用是什么
    cron表达式用于指定定时任务的执行时间。它是一个字符串,由6个或7个字段组成,分别表示秒、分钟、小时、日期、月份、星期和年份(可选...
    99+
    2023-08-12
    cron表达式
  • quartz时间表达式Cron的作用是什么
    Cron是一种用于定义定期执行任务的时间表达式语法。它是一种在UNIX和类UNIX系统中常见的任务调度器,可用于执行定时任务,如备份...
    99+
    2023-08-18
    quartz
  • cron表达式在线解析的方法是什么
    要在线解析cron表达式,可以使用一些开发工具或网站来帮助实现。一种常用的方法是使用Cron表达式解析库,如Java中的Quartz...
    99+
    2023-08-12
    cron表达式
  • SpringBoot定时任务及Cron表达式是怎样的
    这期内容当中小编将会给大家带来有关SpringBoot定时任务及Cron表达式是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各...
    99+
    2023-06-17
  • Quartz的cron表达式(定时器设置的具体表示的参数)
    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。按顺序依次为秒(0~59)分钟(0~59)小时(0~23)天(月)(0~31,但是你需要考虑你月的天数)月(0~11)天(星期)(1~7 1=SUN 或 SUN,MON,TUE...
    99+
    2023-06-03
  • 什么是java表达式
    什么是java表达式在Java语言中,表达式是由变量或常量与符号的组合,例如:num1+num2;或age>18;等。表达式中常用的符号称为运算符,这些运算符作用的变量或常量称为操作数。例如:在表达式age>18中,age和18是操作数,符...
    99+
    2020-08-17
    java基础 java 表达式
  • 什么是css表达式
    什么是css表达式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 css表达式就是在css属性后使用expre...
    99+
    2024-04-02
  • javascript表达式是什么
    这篇文章将为大家详细讲解有关javascript表达式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 javascript表达式有:1、...
    99+
    2024-04-02
  • LINQ表达式是什么
    这篇文章主要讲解了“LINQ表达式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ表达式是什么”吧!LINQ表达式简介OO(面向对象)以外的疆域:信息的访问与整合。关系数据库与X...
    99+
    2023-06-17
  • R语言表达式是什么以及用法
    这篇文章主要讲解了“R语言表达式是什么以及用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R语言表达式是什么以及用法”吧!R提供的组合表达式的结构:分号括号花括号分离型表达式x = 1y ...
    99+
    2023-06-14
  • Linq Lambda表达式是什么
    本篇内容介绍了“Linq Lambda表达式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linq Lambda表达式许多标准查询操作...
    99+
    2023-06-17
  • python中什么是表达式
    今天就跟大家聊聊有关python中什么是表达式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。说明Python表达式是变量、常量、计算符和方法调用的序列,它执行指定的计算,并返回某个确...
    99+
    2023-06-20
  • Python中怎么使用正则表达式及正则表达式匹配规则是什么
    1 导库import re2 使用模板re_pattern = re.compile(pattern, flags=0) result = re.findall(re_pattern,string)3 说明参数描述pattern匹配的正则表...
    99+
    2023-05-14
    Python
  • JavaScript中的表达式是什么
    今天给大家介绍一下JavaScript中的表达式是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。在JavaScript中...
    99+
    2024-04-02
  • C语言表达式是什么
    这篇文章主要介绍“C语言表达式是什么”,在日常操作中,相信很多人在C语言表达式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言表达式是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C语言表达...
    99+
    2023-06-17
  • java中Lamda表达式是什么
    java中Lamda表达式是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Lamda表达式λ 希腊字母表中排序第十一位的字母,英语名称为 Lamda避免匿名内部类定义过多可...
    99+
    2023-06-22
  • 什么是Perl正则表达式
    这篇文章将为大家详细讲解有关什么是Perl正则表达式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Perl正则表达式一、什么是Perl正则表达式一个Perl正则表达式,就是用某种模式去匹配一类字符串的一个...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作