1、常用定时任务框架有Quartz和Spring提供的@Schedule注解,两者都使用了Cron表达式,下面详细讲解下Cron的语法规则、Cron支持7个域,分别是、秒分时日月周年,其中年可以省略,其他6个是必须的。
2、(1)*、表示匹配该域的任意值。
3、假如在Minutes域使用,即表示每分钟都会触发事件。
4、(2)?、只能用在DayofMonth和DayofWeek两个域。
5、它也匹配域的任意值,但实际不会。
6、因为DayofMonth和DayofWeek会相互影响。
7、例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法、13131520*?,其中后一位只能用?,而不能使用,如果使用*表示不管星期几都会触发,实际上并不是这样。
8、(3)-、表示范围。
9、例如在Minutes域使用5-表示从5分到20分钟每分钟触发一次(4)/、表示起始时间开始触发,然后每隔固定时间触发一次。
10、例如在Minutes域使用5/20,则意味着5分钟触发一次,而45等分别触发一次.(5),、表示列出枚举值。
11、例如、在Minutes域使用5,则意味着在5和20分每分钟触发一次。
12、(6)L、表示后,只能出现在DayofWeek和DayofMonth域。
13、如果在DayofWeek域使用5L,意味着在后的一个星期四触发。
14、(7)W、表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的近的有效工作日触发事件。
15、例如、在DayofMonth使用5W,如果5日是星期则将在近的工作日、星期即4日触发。
16、如果5日是星期天,则在6日(周一)触发。
17、如果5日在星期一到星期五中的一天,则就在5日触发。
18、另外一点,W的近寻找不会跨过月份。
19、(8)LW、这两个字符可以连用,表示在某个月后一个工作日,即后一个星期五。
20、(9)#、用于确定每个月第几个星期几,只能出现在DayofMonth域。
21、例如在4#表示某月的第二个星期三。
22、(1)0021*?*表示在每月的1日的凌晨2点调整任务(2)01510?*MON-FRI表示周一到周五每天上午15执行作业(3)01510?6L2002-2006表示2002-2006年的每个月的后一个星期五上午15执行作(4)0010,14,16**?每天上午10点,下午2点,4点(5)00/309-17**?朝九晚五工作时间内每半小时(6)0012?*WED表示每个星期三中午12点(7)0012**?每天中午12点触发(8)01510?**每天上午15触发(9)01510**?每天上午15触发(10)01510**?*每天上午15触发(11)01510**?20052005年的每天上午15触发(12)0*14**?在每天下午2点到下午59期间的每1分钟触发(13)00/514**?在每天下午2点到下午55期间的每5分钟触发(14)00/514,18**?在每天下午2点到55期间和下午6点到55期间的每5分钟触发(15)00-514**?在每天下午2点到下午05期间的每1分钟触发(16)010,4414?3WED每年三月的星期三的下午10和44触发(17)01510?*MON-FRI周一至周五的上午15触发(18)0151015*?每月15日上午15触发(19)01510L*?每月后一日的上午15触发(20)01510?*6L每月的后一个星期五上午15触发(21)01510?*6L2002-20052002年至2005年的每月的后一个星期五上午15触发(22)01510?*6#3每月的第三个星期五上午15触发。
二、Linux Crontab 表达式详解1、cron的表达式被用来配置CronTrigger实例。
2、 cron的表达式是字符串,实际上是由七子表达式,描述个别细节的时间表。
3、这些子表达式是分开的空白,代表、SecondsMinutesHoursDay-of-MonthMonthDay-of-WeekYear(可选字段)例 "0012?*WED"在每星期三下午00执行,个别子表达式可以包含范围,例如,在前面的例子里("WED")可以替换成"MON-FRI","MON,WED,FRI"甚至"MON-WED,SAT".“*”代表整个时间段.每一个字段都有一套可以指定有效值,如Seconds(秒) 、可以用数字0-59表示,Minutes(分) 、可以用数字0-59表示,Hours(时) 、可以用数字0-23表示,Day-of-Month(天)、可以用数字1-31中的任一一个值,但要注意一些特别的月份Month(月) 、可以用0-11或用字符串 “JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOVandDEC”表示Day-of-Week(每周)、可以用数字1-7表示(1=星期日)或用字符口串“SUN,MON,TUE,WED,THU,FRIandSAT”表示“/”、为特别单位,表示为“每”如“0/15”表示每隔15分钟执行一次,“0”表示为从“0”分开始,“3/20”表示表示每隔20分钟散派执行一次,“3”表示从第3分钟开始执行“?”、表示每月的某一天,或第周的某一天“L”、用于每月,或每周,表示为每月的后一天,或每个月的后星期几如“6L”表示“每月的后一个星期五”“W”、表示为近工作日,如“15W”放在每月(day-of-month)字段上表示为“到本月15日近的工作日”““#”、是用来指定“的”每月第n个工作日,例在每周(day-of-week)这个字段中内容为"6#3"or"FRI#3"则表示“每月第三个星期五”1)Cron表达式的格式、秒分时日月周年(可选)。
4、字段名 允许的值 允许的特殊字符秒 0-59 ,-*/分 0-59 ,-*/小时 0-23 ,-*/日 1-31 ,-*?/LWC月 1-12orJAN-DEC ,-*/周几 1-7orSUN-SAT ,-*?/LC#年(可选字段) empty,1970-2099 ,-*/“?”字符、表示不确定的值“,”字符、指定数个值“-”字符、指定一个值的范围“/”字符、指定一个值的增加幅度。
5、n/m表示从n开始,每次增加m“L”字符、用在日表示一个月中的后一天,用在周表示该月后一个星期X“W”字符、指定离给定日期近的工作日(周一到周五)“#”字符、表示该月第几个周X。
6、6#3表示该月第3个周五2)Cron表达式范例念掘敏、每隔5秒执行一次、*/5****?每隔1分钟执行一次、0*/1***?每天23点执行一次、0023**?每天凌晨1点执行一次、001**?每月1号凌晨1点执行一次、0011*?每月后一天23点执行一次、0023L*?每周星期天仔枝凌晨1点实行一次、001?*L在26分、29分、33分执行一次、026,29,33***?每天的0点、13点、18点、21点都执行一次、000,13,18,21**?。
三、cron表达式的使用1、Cron适用于周期性执行、日常维护、在某时刻需要完成的单次任务等场景。
2、Cron表达式是一个具有时间含义的字符串,字符串以5个空格隔开,一般分为5个域,格式为XXXXX。
3、其中X是一个域的占位符。
4、单个域有多个取值时,使用半角逗号,隔开取值。
5、下表为Cron表达式中五个域能够取慎宴的值以及支持的特殊字符域是否必需取值范围分钟是0-59小时是0-23日期是1-31月份是1-12星期是1-7Cron表达式中的每个域都支持一定数量的特殊字符特殊字符含义示例以下为Cron表达式的取值示例示例说明1510***每天上午15执行任务012***每天中午00执行任激孝虚务010,14,16***每天上午00点、下午00以及下午00执行任务0/409-17***每天上午000到下午00时间段内每隔40分钟执行任务012**3每个星期三中午00执行任务151015**每月15日上午15执行任务151025**每明燃月25日上午15执行任务0,3014*33每年3月的每个星期三下午00到30时间段内执行任务。
四、cron 表达式1、那每个月1号上午8点执行,每隔30分钟重复一次是不是cron="00/3081*?"-----------这个是对的,但过了8点应该就不执行了。
五、cron表达式是什么1、Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,Cron有如下两种语法格式、(1)SecondsMinutesHoursDayofMonthMonthDayofWeekYear(2)SecondsMinutesHoursDayofMonthMonthDayofWeekcorn从左到右(用空格隔开)、秒分小时月份中的日期月份星期中的日期年份常用表达式例子、(1)01510?*6#3每月的第三个星期五上午15触发(2)01510**?20052005年的每天上午15触发cron表达式中的特殊字符每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是、*、表示匹配该域的任意值,假如在Minutes域使用*,即表示每分钟都会触发事件。
2、-、表示范围,例如在Minutes域使用5-表示从5分到20分钟每分钟触发一次。
3、/、表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/则意味着5分钟触发一次,而45等分别触发一次。
4、,、表示列出枚举值值。
5、例如、在Minutes域使用则意味着在5和20分每分钟触发一次。
6、L、表示后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在后的一个星期四触发。
7、LW、这两个字符可以连用,表示在某个月后一个工作日,即后一个星期五。
8、#、用于确定每个月第几个星期几,只能出现在DayofMonth域。
9、例如在4#表示某月的第二个星期三。
六、cron表达式 0 0/10 8-17 * * ? 如何表示8点到17点30分每10分钟执行一次1、cron表达式00/108-17**?就是表示8点到17点30分每10分钟执行一次。
2、解析、结构、corn从左到右(用空格隔开)、秒分小时月份中的日期月份星期中的日期年份字段含义、*、表示匹配该域的任意值。
3、假如在Minutes域使用*,即表示每分钟都会触发事件。
4、?、只能用在DayofMonth和DayofWeek两个域。
5、它也匹配域的任意值,但实际不会。
6、因为DayofMonth和DayofWeek会相互影响。
7、例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法、13131520*?,其中后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
8、-、表示范围。
9、例如在Minutes域使用5-表示从5分到20分钟每分钟触发一次。
10、/、表示起始时间开始触发,然后每隔固定时间触发一次。
11、例如在Minutes域使用5/20,则意味着5分钟触发一次,而45等分别触发一次.。
12、因此,cron表达式00/108-17**?就是表示8点到17点30分每10分钟执行一次。
13、扩展资料、常用表达式例子0021*?*表示在每月的1日的凌晨2点调整任务01510?*MON-FRI表示周一到周五每天上午15执行作业01510?6L2002-2006表示2002-2006年的每个月的后一个星期五上午15执行作0010,14,16**?每天上午10点,下午2点,4点00/309-17**?朝九晚五工作时间内每半小时0012?*WED表示每个星期三中午12点0012**?每天中午12点触发01510?**每天上午15触发01510**?每天上午15触发01510**?*每天上午15触发参考资料来源、百度百科-cron。
七、cron表达式是什么?1、Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式、(1)SecondsMinutesHoursDayofMonthMonthDayofWeekYear。
2、(2)SecondsMinutesHoursDayofMonthMonthDayofWeek。
3、每一个域含义是、(1)*、表示匹配该域的任意值。
4、假如在Minutes域使用*,即表示每分钟都会触发事件。
5、(2)?、只能用在DayofMonth和DayofWeek两个域。
6、它也匹配域的任意值,但实际不会。
7、因为DayofMonth和DayofWeek会相互影响。
8、例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法、13131520*?,其中后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
八、springboot定时任务cron表达式详解1、Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式、SecondsMinutesHoursDayofMonthMonthDayofWeekYear或SecondsMinutesHoursDayofMonthMonthDayofWeek每一个域可出现的字符如下、Seconds、可出现",-*/"四个字符,有效范围为0-59的整数Minutes、可出现",-*/"四个字符,有效范围为0-59的整数Hours、可出现",-*/"四个字符,有效范围为0-23的整数DayofMonth、可出现",-*/?LWC"八个字符,有效范围为0-31的整数Month、可出现",-*/"四个字符,有效范围为1-12的整数或JAN-DEcDayofWeek、可出现",-*/?LC#"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。
2、1表示星期天,2表示星期依次类推Year、可出现",-*/"四个字符,有效范围为1970-2099年每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是、(1)*、表示匹配该域的任意值,假如在Minutes域使用*,即表示每分钟都会触发事件。
3、(2)?、只能用在DayofMonth和DayofWeek两个域。
4、它也匹配域的任意值,但实际不会。
5、因为DayofMonth和DayofWeek会相互影响。
6、例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法、13131520*?,其中后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
7、(3)-、表示范围,例如在Minutes域使用5-表示从5分到20分钟每分钟触发一迅碧粗次(4)/、表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而45等分别触发一次.(5),、表示列出枚举值值。
8、例如、慧茄在Minutes域使用5,则意味着在5和20分每分钟触发一次。
9、(6)L、表示后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在后的一个星期四触发。
10、(7)W、表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的近的有效工作日触发事件。
11、例如、在DayofMonth使用5W,如果5日是星期则将在近的工作日、星期即4日触发。
12、如果5日是星期天,则在6日(周一)触发。
13、如果5日在星期一到星期五中的一天,则就在5日触发。
14、另外一点,W的近寻找不会跨过月份(8)LW、这两个字符可以连用,表示在某个月后一个工作日,即后一个星期五。
15、(9)#、用于确定每个月第几个星期几,只能出现在DayofMonth域。
16、例如在4#表示某月的第二个星期三。
17、举几个例子、0021*?*表示在每月的1日的凌晨2点调度任务01510?*MON-FRI表示周一到周五每天上午15执行作业01510?6L2002-2006表示2002-2006年的每个月的后一个星期五上午15执行作一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。
18、按顺序依次为秒(0~59)分钟(0~59)小时(0~23)天(月)(0~但是你需要考虑你月的天数)月(0~11)天(星期)(1~71=SUN或SUN,MON,TUE,WED,THU,FRI,SAT)年份(1970-2099)其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表亩镇示每隔4小时),一个列表(1,3,5),通配符。
19、由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?0010,14,16**?每天上午10点,下午2点,4点00/309-17**?朝九晚五工作时间内每半小时0012?*WED表示每个星期三中午12点"0012**?"每天中午12点触发"01510?**"每天上午15触发"01510**?"每天上午15触发"01510**?*"每天上午15触发"01510**?2005"2005年的每天上午15触发"0*14**?"在每天下午2点到下午59期间的每1分钟触发"00/514**?"在每天下午2点到下午55期间的每5分钟触发"00/514,18**?"在每天下午2点到55期间和下午6点到55期间的每5分钟触发"00-514**?"在每天下午2点到下午05期间的每1分钟触发"010,4414?3WED"每年三月的星期三的下午10和44触发"01510?*MON-FRI"周一至周五的上午15触发"0151015*?"每月15日上午15触发"01510L*?"每月后一日的上午15触发"01510?*6L"每月的后一个星期五上午15触发"01510?*6L2002-2005"2002年至2005年的每月的后一个星期五上午15触发"01510?*6#3"每月的第三个星期五上午15触发有些子表达式能包含一些范围或列表例如、子表达式(天(星期))可以为“MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”“*”字符代表所有可能的值因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天“/”字符用来指定数值的增量例如、在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“43”)的含义一样“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”“L”字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写但是它在两个子表达式里的含义是不同的。
20、在天(月)子表达式中,“L”表示一个月的后一天在天(星期)自表达式中,“L”表示一个星期的后一天,也就是SAT如果在“L”前有具体的内容,它就具有其他的含义了例如、“6L”表示这个月的倒数第6天,“FRIL”表示这个月的一个星期五注意、在使用“L”参数时,不要指定列表或范围,因为这会导致问题字段允许值允许的特殊字符秒0-59,-*/分0-59,-*/小时0-23,-*/日期1-31,-*?/LWC月份1-12或者JAN-DEC,-*/星期1-7或者SUN-SAT,-*?/LC#年(可选)留空,1970-2099,-*/。
九、cron表达式详解1、Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式、(1) SecondsMinutesHoursDayofMonthMonthDayofWeekYear (2)SecondsMinutesHoursDayofMonthMonthDayofWeekcorn从左到右(用空格隔开)、秒分小时月份中的日期月份星期中的日期年份(年份可选,留空)字段允许值允许的特殊字符秒(Seconds)0~59的整数,-*/ 四个字符分(Minutes)0~59的整数,-*/ 四个字符小时(Hours)0~23的整数,-*/ 四个字符日期(DayofMonth)1~31的整数(但是你需要考虑你月的桐昌天数),-*?/LWC 八个字符月份(Month)1~12的整数或者JAN-DEC,-*/ 四个字符星期(DayofWeek)1~7的整数或者SUN-SAT(1=SUN),-*?/LC# 八个字符年(可选,留空)(Year)1970~2099,-*/ 四个字符每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是、(1)*、表示匹配该域的任意值。
2、假如在Minutes域使用*,即表示每分钟都会触发事件。
3、(2)?、只能用在DayofMonth和DayofWeek两个域。
4、它也匹配域的任意值,但实际不会。
5、因为DayofMonth和DayofWeek会相互影响。
6、例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法、13131520*?,其中后一位只能用?,而不能使用*,如果局谈扒使用*表示不管星期几都会触发,实际上并不是这样。
7、(3)-、表示范围。
8、例如在Minutes域使用5-表示从5分到20分钟每分钟触发一次(4)/、表示起始时间开始触发,然后每隔固定时间触发一次。
9、例如在Minutes域使用5/20,则意味着5分钟触发一次,而45等分别触发一次.(5),、表示列出枚举值。
10、例如、在Minutes域使侍差用5,则意味着在5和20分每分钟触发一次。
11、(6)L、表示后,只能出现在DayofWeek和DayofMonth域。
12、如果在DayofWeek域使用5L,意味着在后的一个星期四触发。
13、(7)W、表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的近的有效工作日触发事件。
14、例如、在DayofMonth使用5W,如果5日是星期则将在近的工作日、星期即4日触发。
15、如果5日是星期天,则在6日(周一)触发。
16、如果5日在星期一到星期五中的一天,则就在5日触发。
17、另外一点,W的近寻找不会跨过月份。
18、(8)LW、这两个字符可以连用,表示在某个月后一个工作日,即后一个星期五。
19、(9)#、用于确定每个月第几个星期几,只能出现在DayofWeek域。
20、例如在4#表示某月的第二个星期三。
21、(0)0/20****?表示每20秒调整任务(1)0021*?表示在每月的1日的凌晨2点调整任务(2)01510?*MON-FRI表示周一到周五每天上午15执行作业(3)01510?6L2002-2006表示2002-2006年的每个月的后一个星期五上午15执行作(4)0010,14,16**?每天上午10点,下午2点,4点(5)00/309-17**?朝九晚五工作时间内每半小时(6)0012?*WED表示每个星期三中午12点(7)0012**?每天中午12点触发(8)01510?** 每天上午15触发(9)01510**?每天上午15触发(10)01510**?*每天上午15触发(11)01510**?20052005年的每天上午15触发(12)0*14**?在每天下午2点到下午59期间的每1分钟触发(13)00/514**?在每天下午2点到下午55期间的每5分钟触发(14)00/514,18**?在每天下午2点到55期间和下午6点到55期间的每5分钟触发(15)00-514**?在每天下午2点到下午05期间的每1分钟触发(16)010,4414?3WED每年三月的星期三的下午10和44触发(17)01510?*MON-FRI周一至周五的上午15触发(18)0151015*?每月15日上午15触发(19)01510L*?每月后一日的上午15触发(20)01510?*6L每月的后一个星期五上午15触发(21)01510?*6L2002-20052002年至2005年的每月的后一个星期五上午15触发(22)01510?*6#3每月的第三个星期五上午15触发(1)有些子表达式能包含一些范围或列表 例如、子表达式(天(星期))可以为“MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”“*”字符代表所有可能的值 因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天“/”字符用来指定数值的增量例如、在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“43”)的含义一样“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”“L”字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写但是它在两个子表达式里的含义是不同的。
22、在天(月)子表达式中,“L”表示一个月的后一天在天(星期)自表达式中,“L”表示一个星期的后一天,也就是SAT 如果在“L”前有具体的内容,它就具有其他的含义了例如、“6L”表示这个月的倒数第6天,“FRIL”表示这个月的一个星期五注意、在使用“L”参数时,不要指定列表或范围,因为这会导致问题。