如果需要复杂的任务计划调度,像日历样式的任务,而不是简单的时间间隔调度,需要使用CronTrigger,SimpleTrigger满足不了需求。
用CronTrigger,你可以定义任务计划像“每周五的中午”,或“每个工作日的早上9:30”,甚至可以定义“1月份的每周一、周三、周五早上9:00至10:00,每5分钟一次”。
虽然如此,像SimpleTrigger一样,CronTrigger仍有startTime属性定义计划的开始时间,endTime(可选)属性定义计划的中止时间。
Cron Expressions
Cron-Expressions是用来配置CronTrigger实例。Cron-Expressions是由七段子表达式组成的字符串,描述各个细节计划。这些子字符串由空格分开,每个子字符串表示一个域,分别为:
1 秒
2 分
3 时
4 几号
5 月份
6 星期几
7 年(可选域)
例如:"0 0 12 ? * WED"-表示每周三12:00:00pm"。
其中每个独立的子表达式都可以用范围或者列表表示。例如:
前例的”WED“也可以写成:
"MON-FRI"(范围表示)
"MON,WED,FRI"(列表表示)
"MON-WED,SAT"(范围加列表)
通配符(*)可以用来表示某个子表达式域的每一个可能的值。因此,“*”号用在月份里,表示每月。用在星期几里,表示一周中的每天。
每个子表达式域都有一组有效的值,这些值都是显然意见的。例:用0-59表示秒和分,用0到23表示小时。几号用0-31中的任何值,但是要小心每月的天数。月份指定的值应该是0至11,也可以用字符串 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV和DEC表示。星期几用1到7表示(1=星期天),或用英文字符表示:SUN,MON,TUE,WED,THU,FRI和SAT。
字符“/”用来表示增量的值。例如:如果用“0/15”表示分,就表示从一个小时的0分开始,在这小时内每隔15分钟一次。如果用"3/20"表示分,则表示从一个小时的3分开始,在这小时内每隔20分钟一次。也可以用“3,23,43”表示。注意"*/35"并不是表示每35分钟,而是表示从一个小时的0分开始,每隔35分钟一次,相当于"0,35"。
“?"号允许用在几号和星期几的子字符串域中,用来说明没有指定值。
“L”字符允许用在几号和星期几域中,是"last"的缩写。“L”用在几号里意思是这个月的最后一天,如果是1月就指31号,如果是闰年的2月就是28号。如果用在星期几里,他就是表示“7”或者“SAT”(星期六)。但是如果L用在一个值的后面联合表示星期几域,就表示“这个月最后一个星期几”。例如:“6L”或“FRIL”表示这个月的最后一个星期五。同样也可以用一个偏移变量表示距离某个月最后一天的天数。例如:“L-3”表示某月最后一天的倒数第三天。但用“L“字符时,不要将“L”用在列表或范围中,那样你会混淆或者获得不是预期的结果。
“W”用来指定某一号最近的工作日(星期一至五),例如:“15W”放在几号里,表示这个月15号最近的一个工作日。
“#”号用指定某月第几个工作日,例如:“6#3”或“FRI#3”放在星期几域中,表示这个月第三个星期五。
下面是一些表达式的样例,你可以从JavaDoc中找到更多的例子。
Cron Expressions示例
例1-一个表达式表示每5分钟。
"0 0/5 * * * ?"
例2——表示每分钟的10秒后,每5钟一次(如:10:00:10 am,10:05:10 am,等等)
"10 0/5 * * * ?"
例3——表示运行在每个星期三,星期五的10:30,11:30,12:30 and 13:30
"0 30 10-13 ? * WED,FRI"
例4——表示每月的5号和20号的早8点至早10点每30分钟一次。
"0 0/30 8-10 5,20 * ?"
注意,有些计划调度需求如果用一个触发器会很复杂,例如:“早9:00至10:00每5分钟,下午1:00至10:00每20分钟”,这种情况下可以是单的创建两个触发器同时运行一个JOB
以下是附录的原文,有兴趣可以自己去看。
Lesson 6: CronTrigger
CronTrigger is often more useful than SimpleTrigger, if you need a job-firing schedule that recurs based on calendar-like notions, rather than on the exactly specified intervals of SimpleTrigger.
With CronTrigger, you can specify firing-schedules such as "every Friday at noon", or "every weekday and 9:30 am", or even "every 5 minutes between 9:00 am and 10:00 am on every Monday, Wednesday and Friday during January".
Even so, like SimpleTrigger, CronTrigger has a startTime which specifies when the schedule is in force, and an (optional) endTime that specifies when the schedule should be discontinued.
Cron Expressions
Cron-Expressions are used to configure instances of CronTrigger. Cron-Expressions are strings that are actually made up of seven sub-expressions, that describe individual details of the schedule. These sub-expression are separated with white-space, and represent:
1 Seconds
2 Minutes
3 Hours
4 Day-of-Month
5 Month
6 Day-of-Week
7 Year (optional field)
An example of a complete cron-expression is the string "0 0 12 ? * WED" - which means "every Wednesday at 12:00:00 pm".
Individual sub-expressions can contain ranges and/or lists. For example, the day of week field in the previous (which reads "WED") example could be replaced with "MON-FRI", "MON,WED,FRI", or even "MON-WED,SAT".
Wild-cards (the '*' character) can be used to say "every" possible value of this field. Therefore the '*' character in the "Month" field of the previous example simply means "every month". A '*' in the Day-Of-Week field would therefore obviously mean "every day of the week".
All of the fields have a set of valid values that can be specified. These values should be fairly obvious - such as the numbers 0 to 59 for seconds and minutes, and the values 0 to 23 for hours. Day-of-Month can be any value 0-31, but you need to be careful about how many days are in a given month! Months can be specified as values between 0 and 11, or by using the strings JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV and DEC. Days-of-Week can be specified as values between 1 and 7 (1 = Sunday) or by using the strings SUN, MON, TUE, WED, THU, FRI and SAT.
The '/' character can be used to specify increments to values. For example, if you put '0/15' in the Minutes field, it means 'every 15th minute of the hour, starting at minute zero'. If you used '3/20' in the Minutes field, it would mean 'every 20th minute of the hour, starting at minute three' - or in other words it is the same as specifying '3,23,43' in the Minutes field. Note the subtlety that "*/35" does not mean "every 35 minutes" - it mean "every 35th minute of the hour, starting at minute zero" - or in other words the same as specifying '0,35'.
The '?' character is allowed for the day-of-month and day-of-week fields. It is used to specify "no specific value". This is useful when you need to specify something in one of the two fields, but not the other. See the examples below (and CronTrigger JavaDoc) for clarification.
The 'L' character is allowed for the day-of-month and day-of-week fields. This character is short-hand for "last", but it has different meaning in each of the two fields. For example, the value "L" in the day-of-month field means "the last day of the month" - day 31 for January, day 28 for February on non-leap years. If used in the day-of-week field by itself, it simply means "7" or "SAT". But if used in the day-of-week field after another value, it means "the last xxx day of the month" - for example "6L" or "FRIL" both mean "the last friday of the month". You can also specify an offset from the last day of the month, such as "L-3" which would mean the third-to-last day of the calendar month. When using the 'L' option, it is important not to specify lists, or ranges of values, as you'll get confusing/unexpected results.
The 'W' is used to specify the weekday (Monday-Friday) nearest the given day. As an example, if you were to specify "15W" as the value for the day-of-month field, the meaning is: "the nearest weekday to the 15th of the month".
The '#' is used to specify "the nth" XXX weekday of the month. For example, the value of "6#3" or "FRI#3" in the day-of-week field means "the third Friday of the month".
Here are a few more examples of expressions and their meanings - you can find even more in the JavaDoc for org.quartz.CronExpression
Example Cron Expressions
CronTrigger Example 1 - an expression to create a trigger that simply fires every 5 minutes
"0 0/5 * * * ?"
CronTrigger Example 2 - an expression to create a trigger that fires every 5 minutes, at 10 seconds after the minute (i.e. 10:00:10 am, 10:05:10 am, etc.).
"10 0/5 * * * ?"
CronTrigger Example 3 - an expression to create a trigger that fires at 10:30, 11:30, 12:30, and 13:30, on every Wednesday and Friday.
"0 30 10-13 ? * WED,FRI"
CronTrigger Example 4 - an expression to create a trigger that fires every half hour between the hours of 8 am and 10 am on the 5th and 20th of every month. Note that the trigger will NOT fire at 10:00 am, just at 8:00, 8:30, 9:00 and 9:30
"0 0/30 8-9 5,20 * ?"
Note that some scheduling requirements are too complicated to express with a single trigger - such as "every 5 minutes between 9:00 am and 10:00 am, and every 20 minutes between 1:00 pm and 10:00 pm". The solution in this scenario is to simply create two triggers, and register both of them to run the same job.
Building CronTriggers
CronTrigger instances are built using TriggerBuilder (for the trigger's main properties) and CronScheduleBuilder (for the CronTrigger-specific properties). To use these builders in a DSL-style, use static imports:
import static org.quartz.TriggerBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.DateBuilder.*:
Build a trigger that will fire every other minute, between 8am and 5pm, every day:
trigger = newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(cronSchedule("0 0/2 8-17 * * ?"))
.forJob("myJob", "group1")
.build();
Build a trigger that will fire daily at 10:42 am:
trigger = newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(dailyAtHourAndMinute(10, 42))
.forJob(myJobKey)
.build();
- or -
trigger = newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(cronSchedule("0 42 10 * * ?"))
.forJob(myJobKey)
.build();
Build a trigger that will fire on Wednesdays at 10:42 am, in a TimeZone other than the system's default:
trigger = newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(weeklyOnDayAndHourAndMinute(DateBuilder.WEDNESDAY, 10, 42))
.forJob(myJobKey)
.inTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
.build();
- or -
trigger = newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(cronSchedule("0 42 10 ? * WED"))
.inTimeZone(TimeZone.getTimeZone("America/Los_Angeles"))
.forJob(myJobKey)
.build();
CronTrigger Misfire Instructions
The following instructions can be used to inform Quartz what it should do when a misfire occurs for CronTrigger. (Misfire situations were introduced in the More About Triggers section of this tutorial). These instructions are defined as constants on CronTrigger itself (including JavaDoc describing their behavior). The instructions include:
Misfire Instruction Constants of CronTrigger
MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_DO_NOTHING
MISFIRE_INSTRUCTION_FIRE_NOW
All triggers also have the Trigger.MISFIRE_INSTRUCTION_SMART_POLICY instruction available for use, and this instruction is also the default for all trigger types. The 'smart policy' instruction is interpreted by CronTrigger as MISFIRE_INSTRUCTION_FIRE_NOW. The JavaDoc for the CronTrigger.updateAfterMisfire() method explains the exact details of this behavior.
When building CronTriggers, you specify the misfire instruction as part of the simple schedule (via CronSchedulerBuilder):
trigger = newTrigger()
.withIdentity("trigger3", "group1")
.withSchedule(cronSchedule("0 0/2 8-17 * * ?")
..withMisfireHandlingInstructionFireAndProceed())
.forJob("myJob", "group1")
.build();
相关推荐
### Quartz CronTrigger配置详解 #### 一、CronTrigger简介 CronTrigger 是 Quartz 调度器中一种非常强大的任务触发机制,它基于类似于 Unix cron 的表达式来定义任务的执行时间。CronTrigger 表达式由七个或八个...
### 关于Quartz中CronTrigger的使用说明 在Quartz调度器中,`CronTrigger`是一种基于Cron表达式的触发器,它允许我们按照类似Unix/Linux操作系统中的Cron任务的方式来定义执行时间表。通过CronTrigger,我们可以...
通配符说明: - *:代表所有可能的值,例如"*/15"表示每15分钟触发。 - ?:表示不关心或不指定的值,如在月的字段上设置"?"表示任何月份。 - -:表示区间,如"10-12"表示10,11,12点触发。 - ,:用于指定多个值,如...
本说明文档将详细解析两种常见的触发器:SimpleTrigger和CronTrigger的配置与使用。 首先,SimpleTrigger适用于那些需要简单定时任务的场景。例如,如果你想让某个任务在特定时间启动,并按设定的间隔重复执行,...
CronTrigger cronTrigger = new CronTrigger("myTrigger", "myGroup"); cronTrigger.setCronExpression("0 0/5 * * * ?"); ``` 3. 注册 Job 和 Trigger:在 Spring 中,可以使用 `@Component` 或 `@...
5. 帮助文档:可能包含了关于CronTrigger表达式语法的详细说明,帮助用户理解每个部分的含义和用法。 使用这个插件,开发者可以更高效地管理Quartz中的定时任务,提高开发效率,减少因为手动编写Cron表达式可能导致...
* 触发器:Quartz提供了多种触发器,包括SimpleTrigger、CronTrigger、DailyTimeIntervalTrigger等。 * Quartz 表:Quartz提供了多种表,包括qrtz_job_details、qrtz_triggers等。 * 依赖注入:Quartz支持依赖注入,...
TriggerBean则负责触发任务的执行,通常使用CronTrigger,因为它支持基于cron表达式的定时规则。 Cron表达式是一种强大的时间表达方式,可以用来定义任务的执行频率。例如,“0 0 12 * * ?”表示每天中午12点执行...
以下是 Quartz 的关键组件、接口和使用方法的详细说明: 1. **Job 接口**: Job 接口是所有定时任务的基础,你需要自定义类去实现这个接口,并重写 `execute(JobExecutionContext arg0)` 方法。`execute()` 方法是...
本篇文章将详细探讨如何在 Spring 中配置定时任务,并通过具体的示例代码进行说明。 #### 二、Spring 定时任务配置原理 在 Spring 中,定时任务主要依赖于 Quartz 这个成熟的任务调度框架。Quartz 提供了丰富的 ...
在Quartz中,我们可以使用CronTrigger类来创建基于cron表达式的触发器,并将其与JobDetail关联,以实现定时任务的调度。以下是一个简单的代码示例: ```java import org.quartz.JobDetail; import org.quartz....
Quartz提供了多种Trigger类型,如SimpleTrigger(简单的触发器)和CronTrigger(基于cron表达式的触发器)。 3. **Scheduler**:调度器,是Quartz的核心,负责管理和执行Jobs以及Triggers。通过`org.quartz....
Quertz中提供了两类触发器为:SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能,例如几点开始,几 点结束,隔多长时间执行,共执行多少次等,后者提供了使用表达式来描述定时功能,因此适用于比较复杂的...
SimpleTrigger用于指定间隔时间和重复次数,而CronTrigger允许使用类似Unix cron表达式的格式来设置复杂的调度规则。 3. **Scheduler(调度器)**:Scheduler是Quartz的核心组件,它管理所有的Job和Trigger。通过...
3. 文档:详细说明如何使用这个生成器,以及Cron表达式的语法和规则。 4. 测试数据:用于测试生成器正确性的输入和预期输出。 使用这样的工具,开发者可以更高效地配置 Quartz 的触发器,确保任务按照预期的时间...
4. **CronTrigger与SimpleTrigger**:CronTrigger基于cron表达式定义触发时间,适合周期性、复杂的执行计划。SimpleTrigger则适用于固定间隔的执行,比如每n秒、分钟、小时执行一次。 5. **集群(Clustering)**:...
在使用 Apscheduler-3.8.0-py2.py3-none-any.whl.zip 这个压缩包时,首先需要解压,这将得到两个文件:`使用说明.txt` 和 `APScheduler-3.8.0-py2.py3-none-any.whl`。`使用说明.txt` 应该包含了关于如何安装和使用 ...
以上就是使用`SchedulingConfigurer`实现动态定时任务的详细说明,结合提供的源码和数据库配置,你可以进一步理解并实践这一功能。在实际项目中,动态定时任务能够极大地提高系统的灵活性和响应性,满足复杂业务需求...
`说明文档.txt`可能包含这些配置的详细步骤和注意事项,以及如何添加和运行定时任务的说明。 6. **自定义任务类** 自定义任务类需要实现`org.quartz.Job`接口或者继承`org.springframework.scheduling.quartz....
Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。...对于"Quartz_demo"这个压缩包文件,可能包含了示例代码、配置文件和说明文档,可以进一步帮助学习和实践Quartz在Web环境中的使用。