How to Use Cron Expressions
Cron expressions are used in the Advanced tab of the Job Scheduler. 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:
- Seconds
- Minutes
- Hours
- Day-of-Month
- Month
- Day-of-Week
- Year (optional field)
Example: 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”.
Valid Field Values
All of the fields have a set of valid values that can be specified.
- All fields:
- Values such as 0 to 59 for seconds and minutes, and the values 0 to 23 for hours.
- Day-of-Month:
- Can be any value 1-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, 2 = Monday, etc.)
or - Using the strings SUN, MON, TUE, WED, THU, FRI and SAT.
- (1 = Sunday, 2 = Monday, etc.)
- Can be specified as values between 1 and 7:
Characters
Character | Description | Example |
---|---|---|
/
|
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’.
The value “/35” does not mean “every 35 minutes” - it means “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. |
L
|
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.
Note: When using the ‘L’ option, it is important not to specify lists, or ranges of values, as you’ll get confusing/unexpected results.
|
W
|
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 ‘#’ character 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:
Example Cron Expressions
- CronTrigger Example 1 - An expression to create a trigger that activates every 5 minutes:
“0 0/5 * * * ?”
- CronTrigger Example 2 - An expression to create a trigger that activates every 5 minutes, at 10 seconds after the minute (10:00:10 am, 10:05:10 am, etc.):
“10 0/5 * * * ?”
- CronTrigger Example 3 - An expression to create a trigger that activates 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 with the following characteristics:
- Activates every half hour between 8 am and 10 am on the 5th and 20th of every month.
- Note that the trigger DOES NOT activate at 10:00 am, only at 8:00, 8:30, 9:00, and 9:30:
“0 0/30 8-9 5,20 * ?”
Complicated Expressions or Triggers
-
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.
-
For more information visit Quartz Cron Expressions Tutorial site.