Class CronExpression
java.lang.Object
org.springframework.scheduling.support.CronExpression
Representation of a
crontab expression
that can calculate the next time it matches.
CronExpression instances are created through parse(String);
the next match is determined with next(Temporal).
Supports a Quartz day-of-month/week field with an L/# expression. Follows common cron conventions in every other respect, including 0-6 for SUN-SAT (plus 7 for SUN as well). Note that Quartz deviates from the day-of-week convention in cron through 1-7 for SUN-SAT whereas Spring strictly follows cron even in combination with the optional Quartz-specific L/# expressions.
- Since:
- 5.3
- Author:
- Arjen Poutsma
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionbooleaninthashCode()static booleanisValidExpression(@Nullable String expression) Determine whether the given string represents a valid cron expression.<T extends Temporal & Comparable<? super T>>
@Nullable Tnext(T temporal) Calculate the nextTemporalthat matches this expression.static CronExpressionParse the given crontab expression string into aCronExpression.toString()Return the expression string used to create thisCronExpression.
-
Method Details
-
parse
Parse the given crontab expression string into aCronExpression. The string has six single space-separated time and date fields:┌───────────── second (0-59) │ ┌───────────── minute (0 - 59) │ │ ┌───────────── hour (0 - 23) │ │ │ ┌───────────── day of the month (1 - 31) │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC) │ │ │ │ │ ┌───────────── day of the week (0 - 7) │ │ │ │ │ │ (0 or 7 is Sunday, or MON-SUN) │ │ │ │ │ │ * * * * * *
The following rules apply:
-
A field may be an asterisk (
*), which always stands for "first-last". For the "day of the month" or "day of the week" fields, a question mark (?) may be used instead of an asterisk. -
Ranges of numbers are expressed by two numbers separated with a hyphen
(
-). The specified range is inclusive. - Following a range (or
*) with/nspecifies the interval of the number's value through the range. - English names can also be used for the "month" and "day of week" fields. Use the first three letters of the particular day or month (case does not matter).
-
The "day of month" and "day of week" fields can contain a
L-character, which stands for "last", and has a different meaning in each field:-
In the "day of month" field,
Lstands for "the last day of the month". If followed by an negative offset (i.e.L-n), it means "nth-to-last day of the month". If followed byW(i.e.LW), it means "the last weekday of the month". -
In the "day of week" field,
dLorDDDLstands for "the last day of weekd(orDDD) in the month".
-
In the "day of month" field,
-
The "day of month" field can be
nW, which stands for "the nearest weekday to day of the monthn". Ifnfalls on Saturday, this yields the Friday before it. Ifnfalls on Sunday, this yields the Monday after, which also happens ifnis1and falls on a Saturday (i.e.1Wstands for "the first weekday of the month"). -
The "day of week" field can be
d#n(orDDD#n), which stands for "then-th day of weekd(orDDD) in the month".
Example expressions:
"0 0 * * * *"= the top of every hour of every day"*/10 * * * * *"= every ten seconds"0 0 8-10 * * *"= 8, 9 and 10 o'clock of every day"0 0 6,19 * * *"= 6:00 AM and 7:00 PM every day"0 0/30 8-10 * * *"= 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day"0 0 9-17 * * MON-FRI"= on the hour nine-to-five weekdays"0 0 0 25 12 ?"= every Christmas Day at midnight"0 0 0 L * *"= last day of the month at midnight"0 0 0 L-3 * *"= third-to-last day of the month at midnight"0 0 0 1W * *"= first weekday of the month at midnight"0 0 0 LW * *"= last weekday of the month at midnight"0 0 0 * * 5L"= last Friday of the month at midnight"0 0 0 * * THUL"= last Thursday of the month at midnight"0 0 0 ? * 5#2"= the second Friday in the month at midnight"0 0 0 ? * MON#1"= the first Monday in the month at midnight
The following macros are also supported.
"@yearly"(or"@annually") to run un once a year, i.e."0 0 0 1 1 *""@monthly"to run once a month, i.e."0 0 0 1 * *""@weekly"to run once a week, i.e."0 0 0 * * 0""@daily"(or"@midnight") to run once a day, i.e."0 0 0 * * *""@hourly"to run once an hour, i.e."0 0 * * * *"
- Parameters:
expression- the expression string to parse- Returns:
- the parsed
CronExpressionobject - Throws:
IllegalArgumentException- in the expression does not conform to the cron format
-
A field may be an asterisk (
-
isValidExpression
Determine whether the given string represents a valid cron expression.- Parameters:
expression- the expression to evaluate- Returns:
trueif the given expression is a valid cron expression- Since:
- 5.3.8
-
next
Calculate the nextTemporalthat matches this expression.- Type Parameters:
T- the type of temporal- Parameters:
temporal- the seed value- Returns:
- the next temporal that matches this expression, or
nullif no such temporal can be found
-
equals
-
hashCode
public int hashCode() -
toString
Return the expression string used to create thisCronExpression.
-