iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >@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://www.lsjlt.com/news/302614.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • @Scheduled参数及cron表达式是什么
    本篇内容主要讲解“@Scheduled参数及cron表达式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“@Scheduled参数及cron表达式是什么”吧!@Scheduled参数及cro...
    99+
    2023-06-22
  • 关于@Scheduled参数及cron表达式解释
    目录@Scheduled参数及cron表达式解释@Scheduled支持以下8个参数cron表达式是一个字符串,以空格分开共6个域通配符说明常用表达式示例@Scheduled 定时任...
    99+
    2022-11-12
  • cron表达式的作用是什么
    cron表达式用于指定定时任务的执行时间。它是一个字符串,由6个或7个字段组成,分别表示秒、分钟、小时、日期、月份、星期和年份(可选...
    99+
    2023-08-12
    cron表达式
  • quartz时间表达式Cron的作用是什么
    Cron是一种用于定义定期执行任务的时间表达式语法。它是一种在UNIX和类UNIX系统中常见的任务调度器,可用于执行定时任务,如备份...
    99+
    2023-08-18
    quartz
  • SpringBoot定时任务及Cron表达式是怎样的
    这期内容当中小编将会给大家带来有关SpringBoot定时任务及Cron表达式是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各...
    99+
    2023-06-17
  • cron表达式在线解析的方法是什么
    要在线解析cron表达式,可以使用一些开发工具或网站来帮助实现。一种常用的方法是使用Cron表达式解析库,如Java中的Quartz...
    99+
    2023-08-12
    cron表达式
  • 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+
    2022-10-19
  • javascript表达式是什么
    这篇文章将为大家详细讲解有关javascript表达式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 javascript表达式有:1、...
    99+
    2022-10-19
  • LINQ表达式是什么
    这篇文章主要讲解了“LINQ表达式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ表达式是什么”吧!LINQ表达式简介OO(面向对象)以外的疆域:信息的访问与整合。关系数据库与X...
    99+
    2023-06-17
  • R语言表达式是什么以及用法
    这篇文章主要讲解了“R语言表达式是什么以及用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“R语言表达式是什么以及用法”吧!R提供的组合表达式的结构:分号括号花括号分离型表达式x = 1y ...
    99+
    2023-06-14
  • Python中怎么使用正则表达式及正则表达式匹配规则是什么
    1 导库import re2 使用模板re_pattern = re.compile(pattern, flags=0) result = re.findall(re_pattern,string)3 说明参数描述pattern匹配的正则表...
    99+
    2023-05-14
    Python
  • Springboot自带定时任务实现动态配置Cron参数方式是是什么
    这篇文章主要讲解了“Springboot自带定时任务实现动态配置Cron参数方式是是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Springboot自带定时任务实现动态配置Cron参数...
    99+
    2023-06-25
  • python中什么是表达式
    今天就跟大家聊聊有关python中什么是表达式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。说明Python表达式是变量、常量、计算符和方法调用的序列,它执行指定的计算,并返回某个确...
    99+
    2023-06-20
  • Linq Lambda表达式是什么
    本篇内容介绍了“Linq Lambda表达式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linq Lambda表达式许多标准查询操作...
    99+
    2023-06-17
  • 正则表达式原理及常用示例是什么
    这期内容当中小编将会给大家带来有关正则表达式原理及常用示例是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、正则的含义正则表达式就是用来操作字符串的一种逻辑公式二、正则表达式的应用场景数据分析时数据...
    99+
    2023-06-26
  • 什么是VB.NET正则表达式
    这篇文章主要介绍了什么是VB.NET正则表达式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.什么是VB.NET正则表达式 基本说来,正则表达式是一种用来描述一定数量文本的...
    99+
    2023-06-17
  • JavaScript中的表达式是什么
    今天给大家介绍一下JavaScript中的表达式是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。在JavaScript中...
    99+
    2022-10-19
  • C语言表达式是什么
    这篇文章主要介绍“C语言表达式是什么”,在日常操作中,相信很多人在C语言表达式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言表达式是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C语言表达...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作