Maven Coordinates
To enable Scheduling add the following dependency to your project’s pom.xml (see Managing Dependencies).
<dependency>
<groupId>io.helidon.microprofile.scheduling</groupId>
<artifactId>helidon-microprofile-scheduling</artifactId>
</dependency>Scheduling
For scheduling tasks in Helidon you can choose from @Scheduled or @FixedRate annotations by required complexity of invocation interval. All you need is define method with one of the annotations in application scoped bean.
Fixed rate
For simple fixed rate invocation interval is @FixedRate the easiest way for scheduling task invocation.
@FixedRate(initialDelay = 5, value = 10, timeUnit = TimeUnit.MINUTES)
public void methodName() {
System.out.println("Every 10 minutes, first invocation 5 minutes after start");
}All values defined with the annotation can be overridden from the config.
fully.quallified.ClassName.methodName:
schedule:
initial-delay: 5
delay: 15
time-unit: HOURSMetadata like human-readable interval description or configured values are available through FixedRateInvocation injected as method parameter.
@FixedRate(initialDelay = 5, value = 10, timeUnit = TimeUnit.MINUTES)
public void methodName(FixedRateInvocation inv) {
System.out.println("Method invoked " + inv.description());
}Cron expression
For more complicated interval definition, cron expression can be leveraged with @Schedule annotation.
@Scheduled("0 15 8 ? * *", concurrentExecution = false)
public void methodName() {
System.out.println("Executer every day at 8:15");
}<seconds> <minutes> <hours> <day-of-month> <month> <day-of-week> <year>| Order | Name | Supported values | Supported field format | Optional |
|---|---|---|---|---|
| 1 | seconds | 0-59 | CONST, LIST, RANGE, WILDCARD, INCREMENT | false |
| 2 | minutes | 0-59 | CONST, LIST, RANGE, WILDCARD, INCREMENT | false |
| 3 | hours | 0-23 | CONST, LIST, RANGE, WILDCARD, INCREMENT | false |
| 4 | day-of-month | 1-31 | CONST, LIST, RANGE, WILDCARD, INCREMENT, ANY, LAST, WEEKDAY | false |
| 5 | month | 1-12 or JAN-DEC | CONST, LIST, RANGE, WILDCARD, INCREMENT | false |
| 6 | day-of-week | 1-7 or SUN-SAT | CONST, LIST, RANGE, WILDCARD, INCREMENT, ANY, NTH, LAST | false |
| 7 | year | 1970-2099 | CONST, LIST, RANGE, WILDCARD, INCREMENT | true |
| Name | Regex format | Example | Description |
|---|---|---|---|
| CONST | \d+ | 12 | exact value |
| LIST | \d+,\d+(,\d+)* | 1,2,3,4 | list of constants |
| RANGE | \d+-\d+ | 15-30 | range of values from-to |
| WILDCARD | \* | * | all values withing the field |
| INCREMENT | \d+\/\d+ | 0/5 | inital number / increments, 2/5 means 2,7,9,11,16,… |
| ANY | \? | ? | any day(apply only to day-of-week and day-of-month) |
| NTH | \# | 1#3 | nth day of the month, 2#3 means third monday of the month |
| LAST | \d*L(+\d+|\-\d+)? | 3L-3 | last day of the month in day-of-month or last nth day in the day-of-week |
| WEEKDAY | \# | 1#3 | nearest weekday of the nth day of month, 1W is the first monday of the week |
| Cron expression | Description |
|---|---|
| * * * * * ? | Every second |
| 0/2 * * * * ? * | Every 2 seconds |
| 0 45 9 ? * * | Every day at 9:45 |
| 0 15 8 ? * MON-FRI | Every workday at 8:15 |
Metadata like human-readable interval description or configured values are available through CronInvocation injected as method parameter.
@Scheduled("0 15 8 ? * *")
public void methodName(CronInvocation inv) {
System.out.println("Method invoked " + inv.description());
}Scheduled annotation properties can be overridden using application.yaml properties
fully.quallified.ClassName.methodName:
schedule:
cron: "* * * * * ?"
concurrent: false| Property | Description |
|---|---|
| cron | String containing cron setup |
| concurrent | Boolean, equivalent concurrentExecution property of @Scheduled. Default true. |