The format of the Quartz cron expression is very similar to that of the UNIX cron format, but there is still a little obvious difference. One of the differences is that the Quartz format supports scheduling down to the second level, while the UNIX cron program only supports up to minute levels. Many of our trigger plans are based on a second-level increment (for example, every 45 seconds), so this is a very good difference.
In UNIX Cron, the job (or command) to be executed is stored in a cron expression, at the sixth domain location. Quartz uses cron expressions to store execution plans. A Crontrigger that references a cron expression is associated with the job at the scheduled time.
Another difference from the UNIX cron expression is the number of domains that are supported in an expression. UNIX gives five domains (minutes, hours, days, months, and weeks ), and Quartz provides seven domains. Table 5.1 lists the seven domains supported by the Quartz cron expression.
Table 5.1. Quartz Cron expressions support to seven domains
Name |
Whether you must |
Allowed values |
Special characters |
Seconds |
Is |
0-59 |
, - * / |
Score of |
Is |
0-59 |
, - * / |
When |
Is |
0-23 |
, - * / |
Day |
Is |
1-31 |
, - * ? /L W C |
Month |
Is |
1-12 or Jan-dec |
, - * / |
Week |
Is |
1-7 or Sun-sat |
, - * ? /L C # |
Years |
Whether |
Empty or 1970-2099 |
, - * / |
The names of the month and week are case insensitive.FRIAndFriis the same.
There are spaces between fields, which is the same as UNIX cron. It is indisputable that the simplest expression that we can write looks like this:
* * * ? * *
This expression fires a deployed job every second (every minute, every hour, every day).
• Understanding special characters
Like UNIX cron, Quartz cron expressions support the creation of more complex execution plans with special characters. However, Quartz is richer in support of special characters than standard UNIX cron expressions.
* asterisk
Use an asterisk (*) to indicate that you want to include all valid values on this domain. For example, using an asterisk on a month field means that the trigger is triggered every month.
Examples of expression patterns:
0 * 17 * *?
Meaning: Trigger is fired every minute from 5 o'clock in the afternoon to 5:59 each day. It stops at 5:59 because the value 17 is on the hour field, and at 6 o'clock in the afternoon, the hour becomes 18, and the trigger is no longer heeded until the next day of 5 o'clock in the afternoon.
Used when you want trigger to be fired on all valid values for the domain*Character.
? Question Mark
?Numbers can only be used inDayAndWeek Field, but cannot be used at the same time on both domains. You can think?The character is "I don't care what the value is on that field." "This differs from the asterisk, which indicates each value on the field." Is that you do not specify a value for the field.
The reason why a value cannot be specified at the same time on both domains is difficult to interpret or even incomprehensible. Basically, assuming that you specify a value at the same time, the meaning becomes ambiguous: consider if an expression isDayThe field has a value of 11, while theWeekSpecified on the domainWED。 So is it to trigger only in the 11th of each month, and exactly the day of Wednesday is excited? Or was it fired at number 11th in every Wednesday? The way to remove this ambiguity is that you cannot specify values on both domains at the same time.
Just remember that if you specify a value for one of these two fields, you must put a?。
Examples of expression patterns:
0 10,44 3 WEB
Meaning: Every Wednesday 2:10 and 2:44 in March is triggered.
, comma
Comma,) is used to specify a list of values on a domain. For example, using the value 0,15,30,45 on the second field means that a trigger is triggered every 15 seconds.
Examples of expression patterns:
0 0,15,30,45 * * *?
Meaning: The trigger is triggered once per quarter.
/ Slash
Slash (/) is used for the increment of the timesheet. We've just used a comma to indicate the increment every 15 minutes, but we can also write this0/15。
Examples of expression patterns:
0/15 0/30 * * *?
Meaning: Trigger trigger every 15 seconds at the hour and the slightest.
-Medium Dash
Medium Dash (-) is used to specify a range. For example, 3-8 on the hour field means "3,4,5,6,7 and 8 points." "The value of the domain does not allow a rollback, so a value like 50-10 is not allowed.
Examples of expression patterns:
0 45 3-8? * *
Meaning: 3 points in the morning to 8 points in the morning of 45 ticks trigger trigger.
L Letter
LDescribes the last value allowed on a domain. It is onlyDayAndWeekDomain support. When used on a Japanese field, it means that theMonthThe last day of the month specified on the domain. For example, the current month field specifies theJANWhen, inDayOn the domainLWill prompt trigger to be triggered on January 31. IfMonthOn the domain isSEP, then L will herald a trigger on September 30. In other words, the trigger is triggered on the last day of the corresponding month, regardless of the month specified.
An expression0 0 8 L *?The meaning is to trigger trigger at 8:00 on the last day of each month. InMonthThe * description on the domain is "every month".
WhenLThe letters are used on the field of the week, indicating the last day of the week, which is Saturday (or the number 7). So if you need to trigger trigger in the last Saturday pm of every month in 11:59, you can use such expressions0. * L。
When used in theWeekfield, you can use a number with theLConnect to represent the last one weeks of the month X. For example, an expression0 0? * 2LThe last one weeks of each month are said to trigger a trigger.
Do not allow range and list values to be associated with L
While you can use the days of the week (1-7) with L, you are not allowed to use a range value and a list value with L. This can produce unpredictable results. |
W Letter
WThe characters represent weekdays (Mon-fri), and can only be used in the day domain. It is used to specify the most recent weekday from the specified day. Most of the business process is based on the work week, so the W character may be very important. For example, in the Japanese domain,15Wmeans "The most recent weekday of the month of No. 15th." "If number 15th is Saturday, then trigger will be triggered at 14th (Friday), because Thursday is closer to 15th than in Monday (this is number 17th).(Translator Unmi Note: Will not be triggered at number 17th, if it is 15W, may be 14th (15th is Saturday) or 15th (15th is Sunday) triggered, that is, can only appear in the adjacent day, if the day of 15th is weekday directly on the day of execution) 。WCan only be used in the specifiedDayThe field is a single day and cannot be a range or list value.
# number of Wells
#Characters can only be used forWeekThe domain. It is used to specify which day of the week of the month. For example, if you specify the value of the week field as6#3, it means the third Friday of the month (6= Friday,#3means the third week of the month). Another example2#1It means the first Monday of the month (2= Monday,#1means the first week of the month). Note that if you specify#5, but there is no 5th week in the month, so the month does not trigger.
The Cron expression Cookbook here is designed to provide scenarios for common execution requirements. Although it is not possible to enumerate all the expressions, the following should provide sufficient examples to meet your business needs.
• Cron Expressions for minutes
Table 5.1: Task Scheduler Cron expressions with minute frequency
Usage |
An expression |
Daily trigger per minute from 5:00pm to 5:59 pm |
0 * 17 * *? |
Triggers every five minutes from 11:00am to 11:55 pm per day |
0 0/5 23 * *?
|
Every five minutes from 3:00 to 3:55 pm and 6:00pm to 6:55 pm per day |
0 0/5 15,18 * *?
|
Daily trigger per minute from 5:00pm to 5:05 am |
0 0-5 5 * *? |
• Cron expressions on the day
Table 5.2. Cron expression on a task plan based on daily frequency
usage |
expression |
daily am |
0 0 3 * *? |
|
0 0 3? * |
Daily (noon) |
0 0 * *? |
|
0 15 10 * *? 2005 |
• Cron expressions for week and month
table 5.3. Cron expressions on task schedules based on weekly and/or monthly frequency
Usage |
An expression |
In every Monday, two, three and Thursday of 10:15 AM |
0 15 10? * Mon-fri |
10:15 AM, number 15th per month. |
0 15 10 15 *? |
10:15 AM on the last day of the month |
0 L *? |
10:15 AM in the last Friday of the month |
0 15 10? * 6L |
In the 2002, 2003, 2004, and 2005 months of the month of the last Friday 10:15 AM |
0 15 10? * 6L 2002-2005 |
10:15 AM, third Friday per month |
0 15 10? * 6#3 |
Every five days (noon) per month from the first day |
0 0 12 1/5 *? |
Every November 11 11:11 AM |
0 11 11 11 11? |
March 2:10 pm and 2:44 pm for each Wednesday |
0 10,44 14? 3 WED |
Eight. Create an instant-triggered Trigger
Sometimes, you need to execute a job immediately. For example, imagine that you are building a GUI program and allowing users to execute it immediately. In another example, you may have detected that a JOB has not been executed successfully, so you want to run it again at once. In Quartz 1.5, several methods have been added to thetriggerutilsclass, making it easy to implement those things. Code 5.4 shows how to deploy a job and just let it execute immediately.
Quartz cron Expressions (Linux timers, Java Timer Tasks, spring task timed tasks)