quartz时间配置说明
- 格式:doc
- 大小:40.00 KB
- 文档页数:2
quartz 时间表达式
Quartz时间表达式是一种用于定义任务调度计划的格式。
它基于CRON表达式,并添加了一些额外的功能。
Quartz时间表达式的格式如下:
{秒数} {分钟} {小时} {日期} {月份} {星期} [{年份}]
其中,方括号中的年份可选,在未指定时表示任务在每一年都会执行。
以下是Quartz时间表达式的一些示例:
- "0 0 12 * * ?" 表示每天中午12点执行任务。
- "0 0/5 * * * ?" 表示每5分钟执行一次任务。
- "0 15 10 ? * MON-FRI" 表示每周一至周五的上午10点15分执行任务。
- "0 0 12 ? * 6L" 表示每月最后一个星期五的中午12点执行任务。
在Quartz时间表达式中,还可以使用一些特殊字符,如:
- *(星号):匹配任意值。
- ?(问号):表示不确定的值,通常用于日期或星期的字段中。
- -(短横线):表示范围。
- ,(逗号):表示多个值。
- /(斜杠):表示步进值。
使用这些特殊字符可以更灵活地定义任务的调度计划。
Quartz表达式“*”字符代表所有可能的值因此,“*”在子表达式(月)里表示每个月的含义,“*”在子表达式(天(星期))表示星期的每一天“/”字符用来指定数值的增量例如:在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样“?”字符仅被用于天(月)和天(星期)两个子表达式,表示不指定值当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”“L”字符仅被用于天(月)和天(星期)两个子表达式,它是单词“last”的缩写但是它在两个子表达式里的含义是不同的。
在天(月)子表达式中,“L”表示一个月的最后一天在天(星期)自表达式中,“L”表示一个星期的最后一天,也就是SAT如果在“L”前有具体的内容,它就具有其他的含义了例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五注意:在使用“L”参数时,不要指定列表或范围,因为这会导致问题字段允许值允许的特殊字符秒 0-59 , - * /分 0-59 , - * /小时 0-23 , - * /日期 1-31 , - * ? / L W C月份 1-12 或者 JAN-DEC , - * /星期 1-7 或者 SUN-SAT , - * ? / L C #年(可选)留空, 1970-2099 , - * /表达式意义"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触发================================================================ ===============秒(0~59)分钟(0~59)小时(0~23)天(月)(0~31,但是你需要考虑你月的天数)月(0~11)天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)一个完整的例子“0 0 12 ? * WED”表示每个星期三中午12点有些子表达式能包含一些范围或列表例如:子表达式(天(星期))可以为“MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”。
一个Cron-表达式是一个由六至七个字段组成由空格分隔的字符串,其中6个字段是必须的而一个是可选的,如下:--------------------------------------------------------------------------------字段名允许的值允许的特殊字符--------------------------------------------------------------------------------秒0-59 , - * /分0-59 , - * /小时0-23 , - * /日1-31 , - * ? / L W C月1-12 or JAN-DEC , - * /周几1-7 or SUN-SAT , - * ? / L C #年(可选字段) empty, 1970-2099 , - * /--------------------------------------------------------------------------------写时从左到右分别表示秒分时日月周年'*' 字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。
'?' 字符可以用在“日”和“周几”字段. 它用来指定'不明确的值'. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。
在后面的例子中可以看到其含义。
'-' 字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点".',' 字符指定数个值。
比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday, Wednesday, and Friday".'/' 字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和45秒"。
普通石英表(QUARTZ)操作指南
1、二针式石英手表的调整方法
(1)将柄头拉出第一档位置。
(2)转动柄头,依照广播电视或电话报时调整好指针。
(3)推回柄头,时间调整完毕。
2、三针式石英手表的调整方法
(1)当秒针运行到12点时,将柄头拉出第一档位置。
(2)转动柄头,依照广播电视或电话报时调整好指针。
(3)根据报时推回柄头,时间调整完毕。
3、带有日期和星期机构石英手表的调整方法
(1)当秒针运行到12点时,将柄头拉出第二档的位置。
(2)转动柄头,依照广播电视或电话报时调整好指针并注意区分上/下午(当发现日期跳动时是晚间的12点)。
(3)根据报时推回柄头,时间调整完毕。
(4)日期或星期的调整方法:将柄头拉出第一档位置。
(5)向前/向后转动柄头,将日历或星期调整到当前的日期。
(6)推回柄头,日期调整完毕。
[注意]
(1)每当二月或小月末必须将日期调整到下个月的1日。
(2)请不要在晚间9:00到凌晨4:30之间调整星期和日期,因为这样可能会使第二天的日期出现错误。
触发器中两个重要的触发器1,SimpleTrigger :可以精确到毫秒,如果需要让任务只在某个时刻执行一次,或者,在某个时刻开始,然后按照某个时间间隔重复执行例如:public SimpleTrigger(String name, //名称String group, //组名Date startTime, //开始时间Date endTime, //结束时间(控制权高于重复次数属性)为null时直到永远int repeatCount, //重复次数(可能是0)long repeatInterval) //重复间隔(以毫秒为单位)2,CronTrigger :像日历那样按日程来触发任务。
可以指定诸如“每个周五中午”,或者“每个工作日的9:30”或者“从每个周一、周三、周五的上午9:00到上午10:00之间每隔五分钟”这样日程安排来触发。
也可以像SimpleTrigger一样,CronTrigger也有一个startTime以指定日程从什么时候开始,也有一个(可选的)endTime以指定何时日程不再继续.Cron表达式被用来配置CronTrigger实例.Cron表达式是一个由7个子表达式组成的字符串。
每个子表达式都描述了一个单独的日程细节。
这些子表达式用空格分隔,分别表示:秒分钟小时月中的天天周中的天年秒---例如:3/5从第3秒开始每隔5秒触发一次通配符('*')可以被用来表示域中“每个”可能的值'?'字符可以用在day-of-month及day-of-week域中,它用来表示“没有指定值”。
'L'字符可以在day-of-month及day-of-week中使用,L是last的缩写。
如时在day-of-month 中L表示的月的最后一天。
在day-of-week中,表示"当月的最后的周XXX",例如:"6L" 或者"FRIL"都表示本月的最后一个周五。
Quartz中时间参数说明即Cron表达式Cron表达式Quartz使用类似于Linux下的Cron表达式定义时间规则,Cron表达式由6或7个由空格分隔的时间字段组成,如表1所示:表1 Cron表达式时间字段Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。
如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;●L:该字符只在日期和星期字段中使用,代表“Last”的意思,但它在两个字段中意思不同。
L在日期字段中,表示这个月份的最后一天,如一月的31号,非闰年二月的28号;如果L 用在星期中,则表示星期六,等同于7。
但是,如果L出现在星期字段里,而且在前面有一个数值X,则表示“这个月的最后X天”,例如,6L表示该月的最后星期五;●W:该字符只能出现在日期字段里,是对前导日期的修饰,表示离该日期最近的工作日。
例如15W表示离该月15号最近的工作日,如果该月15号是星期六,则匹配14号星期五;如果15日是星期日,则匹配16号星期一;如果15号是星期二,那结果就是15号星期二。
但必须注意关联的匹配日期不能够跨月,如你指定1W,如果1号是星期六,结果匹配的是3号星期一,而非上个月最后的那天。
W字符串只能指定单一日期,而不能指定日期范围;●LW组合:在日期字段可以组合使用LW,它的意思是当月的最后一个工作日;●井号(#):该字符只能在星期字段中使用,表示当月某个工作日。
调度Quartz时间格式配置1、 CronTrigger时间格式配置说明CronTrigger配置格式:格式: [秒] [分] [⼩时] [⽇] [⽉] [周] [年]通配符说明:* :表⽰所有值. 例如:在分的字段上设置 "*",表⽰每⼀分钟都会触发。
:表⽰不指定值。
使⽤的场景为不需要关⼼当前设置这个字段的值。
例如:要在每⽉的10号触发⼀个操作,但不关⼼是周⼏,所以需要周位置的那个字段设置为"?" 具体设置为 0 0 0 10 * ?- :表⽰区间。
例如在⼩时上设置 "10-12",表⽰ 10,11,12点都会触发。
, :表⽰指定多个值,例如在周字段上设置 "MON,WED,FRI" 表⽰周⼀,周三和周五触发/ :⽤于递增触发。
如在秒上⾯设置"5/15" 表⽰从5秒开始,每增15秒触发(5,20,35,50)。
在⽉字段上设置'1/3'所⽰每⽉1号开始,每隔三天触发⼀次。
L :表⽰最后的意思。
在⽇字段设置上,表⽰当⽉的最后⼀天(依据当前⽉份,如果是⼆⽉还会依据是否是润年[leap]), 在周字段上表⽰星期六,相当于"7"或"SAT"。
如果在"L"前加上数字,则表⽰该数据的最后⼀个。
例如在周字段上设置"6L"这样的格式,则表⽰“本⽉最后⼀个星期五"W :表⽰离指定⽇期的最近那个⼯作⽇(周⼀⾄周五). 例如在⽇字段上设置"15W",表⽰离每⽉15号最近的那个⼯作⽇触发。
如果15号正好是周六,则找最近的周五(14号)触发, 如果15号是周未,则找最近的下周⼀(16号)触发.如果15号正好在⼯作⽇(周⼀⾄周五),则就在该天触发。
如果指定格式为 "1W",它则表⽰每⽉1号往后最近的⼯作⽇触发。
文章主题:深度解析quartz java参数一、前言在quartz java编程中,参数扮演着非常重要的角色。
掌握quartz java参数的含义和用法,对于实现定时任务和调度任务至关重要。
本文将对quartz java参数进行深度解析,帮助读者更好地理解和运用这些参数。
二、quartz java参数概述1. JobDetail参数JobDetail是quartz中用来描述作业实例的类。
它包含了执行任务所需的所有信息,其中包括:- jobClass:指定实际执行的job类。
- jobDataMap:存储作业所需的参数或数据。
2. Trigger参数Trigger是quartz中用来触发作业执行的类。
在定义Trigger时,需要设置以下参数:- startTime:指定任务启动的时间。
- endTime:指定任务结束的时间。
- cronExpression:使用cron表达式来定义作业执行的时间规则。
3. Scheduler参数Scheduler是quartz中用来管理Trigger和JobDetail,执行作业的类。
在创建Scheduler时,可以设置一些重要的参数:- 是否立即启动任务。
- 是否以集群方式运行。
三、深入解析各参数的含义和用法1. JobDetail参数的含义和用法JobDetail中的jobClass参数用于指定实际执行的job类,可以是实现了Job接口的任何类。
jobDataMap参数用于存储作业所需的参数或数据,可以通过它向作业类传递参数。
2. Trigger参数的含义和用法在定义Trigger时,startTime参数用于指定任务启动的时间,可以是立即启动或者指定一个未来时间;endTime参数用于指定任务结束的时间,可以是永久执行或者指定一个截止时间;cronExpression参数用于定义作业执行的时间规则,可以通过它精确地控制作业的执行时间。
3. Scheduler参数的含义和用法Scheduler中的参数设置非常重要,通过设置是否立即启动任务和是否以集群方式运行,可以灵活地控制任务的执行方式。
Quartz中时间表达式的设置-----corn表达式时间格式: <!-- s m h d m w(?) y(?) -->, 分别对应: 秒>分>小时>日>月>周>年, 举例:1.每天什么时候执行:<value>0 59 23 * * ?</value>: 如下为每天23:59:00开始执行<value>0 1,2,3 11,12 * * ? </value>: 每天11:01,11:02,11:03;12:01,12:02,12:03分执行任务2.每隔多久执行:汇总说明:Cron表达式的时间字段除允许设置数值外,还可使用一些特殊的字符,提供列表、范围、通配符等功能,细说如下:●星号(*):可用在所有字段中,表示对应时间域的每一个时刻,例如,*在分钟字段时,表示“每分钟”;●问号(?):该字符只在日期和星期字段中使用,它通常指定为“无意义的值”,相当于点位符;●减号(-):表达一个范围,如在小时字段中使用“10-12”,则表示从10到12点,即10,11,12;●逗号(,):表达一个列表值,如在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;●斜杠(/):x/y表达一个等步长序列,x为起始值,y为增量步长值。
如在分钟字段中使用0/15,则表示为0,15,30和45秒,而5/15在分钟字段中表示5,20,35,50,你也可以使用*/y,它等同于0/y;==================================================Quartz cron 表达式的格式十分类似于UNIX cron 格式,但还是有少许明显的区别。
区别之一就是Quartz 的格式向下支持到秒级别的计划,而UNIX cron 计划仅支持至分钟级。
许多我们的触发计划要基于秒级递增的(例如,每45秒),因此这是一个非常好的差异。
quartz配置规则Quartz配置规则Quartz是一个广泛使用的开源作业调度框架,它允许开发人员可以自动执行预定的任务。
Quartz主要用于在特定的时间触发作业,并且支持高度可配置的调度规则。
本文将介绍Quartz的配置规则,以及如何一步一步地进行配置。
1. 引入Quartz依赖首先,我们需要在项目中引入Quartz的依赖。
这可以通过在项目的构建文件中添加相应的依赖来实现。
例如,如果我们使用Maven进行项目构建,可以在pom.xml文件中添加以下依赖:<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency>2. 创建Quartz配置文件接下来,我们需要创建一个Quartz的配置文件,用于定义作业调度的规则。
该配置文件通常命名为quartz.properties,并且需要将其放置在项目的classpath 下。
以下是一个简单的quartz.properties示例:org.quartz.scheduler.instanceName = MySchedulerorg.quartz.scheduler.instanceId = AUTOorg.quartz.threadPool.threadCount = 10org.quartz.plugin.triggerHistoryPlugin.class =org.quartz.plugins.history.LoggingTriggerHistoryPluginorg.quartz.plugin.triggerHistoryPlugin.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}org.quartz.plugin.triggerHistoryPlugin.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ssMM/dd/yyyy}org.quartz.plugin.jobHistoryPlugin.class =org.quartz.plugins.history.LoggingJobHistoryPluginorg.quartz.plugin.jobHistoryPlugin.jobT oBeFiredMessage = Job {1}.{0} is about to be executed.org.quartz.plugin.jobHistoryPlugin.jobSuccessMessage = Job {1}.{0} bisexecuted successfully.org.quartz.plugin.jobHistoryPlugin.jobFailedMessage = Job {1}.{0} has failed to execute successfully.在这个示例中,我们定义了Quartz调度器的实例名称(MyScheduler),线程池的大小(10),以及作业历史插件的配置。
Quartz时间配置说明
一个Cron-表达式是一个由六至七个字段组成由空格分隔的字符串,其中6个字段是必须的而一个是可选的,如下:
字段名允许的值允许的特殊字符
秒0-59 , - * /
分0-59 , - * /
小时0-23 , - * /
日1-31 , - * ? / L W C
月1-12 or JAN-DEC , - * /
周几1-7 or SUN-SAT , - * ? / L C #
年(可选字段) empty, 1970-2099 , - * /
------------------------------------------------------------------------------------------------------ *
字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。
?
字符可以用在“日”和“周几”字段. 它用来指定'不明确的值'. 这在你需要指定这两个字段中的某一个值而不是另外一个的时候会被用到。
在后面的例子中可以看到其含义。
_
字符被用来指定一个值的范围,比如在“小时”字段中设为"10-12"表示"10点到12点".
,
字符指定数个值。
比如在“周几”字段中设为"MON,WED,FRI"表示"the days Monday,
Wednesday, and Friday".
/
字符用来指定一个值的的增加幅度. 比如在“秒”字段中设置为"0/15"表示"第0, 15, 30, 和45秒"。
而"5/15"则表示"第5, 20, 35, 和50". 在'/'前加"*"字符相当于指定从0秒开始. 每个字段都有一系列可以开始或结束的数值。
对于“秒”和“分”字段来说,其数值范围为0到59,对于“小时”字段来说其为0到23, 对于“日”字段来说为0到31, 而对于“月”字段来说为1到12。
"/"字段仅仅只是帮助你在允许的数值范围内从开始"第n"的值。
因此对于“月”字段来说"7/6"只是表示7月被开启而不是“每六个月”, 请注意其中微妙的差别。
L
字符可用在“日”和“周几”这两个字段。
它是"last"的缩写, 但是在这两个字段中有不同的含义。
例如,“日”字段中的"L"表示"一个月中的最后一天" ——对于一月就是31号对于二月来说就是28号(非闰年)。
而在“周几”字段中, 它简单的表示"7" or "SA T",但是如果在“周几”字段中使用时跟在某个数字之后, 它表示"该月最后一个星期×" ——比如"6L"表示"该月最后一个周五"。
当使用'L'选项时,指定确定的列表或者范围非常重要,否则你会被结果搞糊涂的。
W
可用于“日”字段。
用来指定历给定日期最近的工作日(周一到周五) 。
比如你将“日”字段设为"15W",意为: "离该月15号最近的工作日"。
因此如果15号为周六,触发器会在14号即周五调用。
如果15号为周日, 触发器会在16号也就是周一触发。
如果15号为周二,那么当天就会触发。
然而如果你将“日”字段设为"1W", 而一号又是周六, 触发器会于下周一也就是当月的3号触发,因为它不会越过当月的值的范围边界。
'W'字符只能用于“日”字段的值为单独的一天而不是一系列值的时候。
'L'和'W'可以组合用于“日”字段表示为'LW',意为"该月最后一个工作日"。
#
字符可用于“周几”字段。
该字符表示“该月第几个周×”,比如"6#3"表示该月第三个周五( 6表示周五而"#3"该月第三个)。
再比如: "2#1" = 表示该月第一个周一而"4#5" = 该月第五个周三。
注意如果你指定"#5"该月没有第五个“周×”,该月是不会触发的。
C
字符可用于“日”和“周几”字段,它是"calendar"的缩写。
它表示为基于相关的日历所计算出的值(如果有的话)。
如果没有关联的日历, 那它等同于包含全部日历。
“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。
对于“月份”字段和“周几”字段来说合法的字符都不是大小写敏感的。
下面是一些完整的例子:
表达式含义
"0 0 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分每分钟一次触发
"0 0/5 14 * * ?" 每天从下午2点开始到2:55分结束每5分钟一次触发
"0 0/5 14,18 * * ?" 每天的下午2点至2:55和6点至6点55分两个时间段内每5分钟一次触发
"0 0-5 14 * * ?" 每天14:00至14:05每分钟一次触发
"0 10,44 14 ? 3 WED" 三月的每周三的14:10和14: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" 每月最后一个周五的10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月最后一个周五的10:15触发
"0 15 10 ? * 6#3" 每月的第三个周五的10:15触发。