Annotation Interface Scheduled
A scheduled method is a non-abstract non-private method of a bean class. It may be either static or non-static.
The schedule is defined either by cron() or by every() attribute. If both are specified, the cron
expression takes precedence.
@ApplicationScoped
class MyService {
@Scheduled(cron = "0/5 * * * * ?")
void check() {
// do something important every 5 seconds
}
}
The annotated method must return void, java.util.concurrent.CompletionStage<Void> or
io.smallrye.mutiny.Uni<Void> and either declare no parameters or one parameter of type
ScheduledExecution.
By default, a scheduled method is executed on the main executor for blocking tasks. However, a scheduled method that returns
java.util.concurrent.CompletionStage<Void> or io.smallrye.mutiny.Uni<Void>, or is annotated with
NonBlocking is executed on the event loop.
Inheritance of metadata
A subclass never inherits the metadata of aScheduled method declared on a superclass. For example, suppose the class
org.amce.Foo is extended by the class org.amce.Bar. If Foo declares a non-static method annotated
with Scheduled then Bar does not inherit the metadata of the scheduled method.- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classExecution is skipped if the application is not running (either not started or already shutdown).static enumRepresents a strategy to handle concurrent execution of a scheduled method.static classExecution is never skipped.static @interfacestatic interface -
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionSpecify the strategy to handle concurrent execution of a scheduled method.Defines a cron-like expression.longDelays the time the trigger should start at.Defines a period after which the trigger should start.Defines the period between invocations.Optionally defines a unique identifier for this job.Defines a period after which the job is considered overdue.Class<? extends Scheduled.SkipPredicate>Specify the predicate that can be used to skip an execution of a scheduled method.The time zone ID for thecron(). -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringConstant value fortimeZone()indicating that the default timezone should be used.
-
Field Details
-
DEFAULT_TIMEZONE
Constant value fortimeZone()indicating that the default timezone should be used.- See Also:
-
-
Element Details
-
identity
String identityOptionally defines a unique identifier for this job.The value can be a property expression. In this case, the scheduler attempts to use the configured value instead:
@Scheduled(identity = "${myJob.identity}"). Additionally, the property expression can specify a default value:@Scheduled(identity = "${myJob.identity:defaultIdentity}").If the value is not provided then a unique id is generated.
- Returns:
- the unique identity of the schedule
- Default:
- ""
-
cron
String cronDefines a cron-like expression. For example "0 15 10 * * ?" fires at 10:15am every day.The value can be a property expression. In this case, the scheduler attempts to use the configured value instead:
@Scheduled(cron = "${myJob.cronExpression}"). Additionally, the property expression can specify a default value:@Scheduled(cron = "${myJob.cronExpression:0/2 * * * * ?}").Furthermore, two special constants can be used to disable the scheduled method:
offanddisabled. For example,@Scheduled(cron="${myJob.cronExpression:off}")means that if the property is undefined then the method is never executed.- Returns:
- the cron-like expression
- Default:
- ""
-
every
String everyDefines the period between invocations.The value is parsed with
Duration.parse(CharSequence). However, if an expression starts with a digit and ends with 'd', "P" prefix will be added automatically. If the expression only starts with a digit, "PT" prefix is added automatically, so for example,15mcan be used instead ofPT15Mand is parsed as "15 minutes". Note that the absolute value of the value is always used.A value less than one second may not be supported by the underlying scheduler implementation. In that case a warning message is logged during build and application start.
The value can be a property expression. In this case, the scheduler attempts to use the configured value instead:
@Scheduled(every = "${myJob.everyExpression}"). Additionally, the property expression can specify a default value:@Scheduled(every = "${myJob.everyExpression:5m}").Furthermore, two special constants can be used to disable the scheduled method:
offanddisabled. For example,@Scheduled(every="${myJob.everyExpression:off}")means that if the property is undefined then the method is never executed.- Returns:
- the period expression based on the ISO-8601 duration format
PnDTnHnMn.nS
- Default:
- ""
-
delay
long delayDelays the time the trigger should start at. The value is rounded to full second.By default, the trigger starts when registered.
- Returns:
- the initial delay
- Default:
- 0L
-
delayUnit
TimeUnit delayUnit- Returns:
- the unit of initial delay
- See Also:
- Default:
- MINUTES
-
delayed
String delayedDefines a period after which the trigger should start. It's an alternative todelay(). Ifdelay()is set to a value greater than zero the value ofdelayed()is ignored.The value is parsed with
Duration.parse(CharSequence). However, if an expression starts with a digit and ends with 'd', "P" prefix will be added automatically. If the expression only starts with a digit, "PT" prefix is added automatically, so for example,15scan be used instead ofPT15Sand is parsed as "15 seconds". Note that the absolute value of the value is always used.The value can be a property expression. In this case, the scheduler attempts to use the configured value instead:
@Scheduled(delayed = "${myJob.delayedExpression}"). Additionally, the property expression can specify a default value:@Scheduled(delayed = "${myJob.delayedExpression:5m}").- Returns:
- the period expression based on the ISO-8601 duration format
PnDTnHnMn.nS
- Default:
- ""
-
concurrentExecution
Scheduled.ConcurrentExecution concurrentExecutionSpecify the strategy to handle concurrent execution of a scheduled method. By default, a scheduled method can be executed concurrently.- Returns:
- the concurrent execution strategy
- Default:
- PROCEED
-
skipExecutionIf
Class<? extends Scheduled.SkipPredicate> skipExecutionIfSpecify the predicate that can be used to skip an execution of a scheduled method.The class must either represent a CDI bean or declare a public no-args constructor. In case of CDI, there must be exactly one bean that has the specified class in its set of bean types, otherwise the build fails. Furthermore, the scope of the bean must be active during execution of the job. If the scope is
Dependentthen the bean instance belongs exclusively to the specific scheduled method and is destroyed when the application is shut down.- Returns:
- the bean class
- Default:
- io.quarkus.scheduler.Scheduled.Never.class
-
overdueGracePeriod
String overdueGracePeriodDefines a period after which the job is considered overdue.The value is parsed with
Duration.parse(CharSequence). HHowever, if an expression starts with a digit and ends with 'd', "P" prefix will be added automatically. If the expression only starts with a digit, "PT" prefix is added automatically, so for example,15mcan be used instead ofPT15Mand is parsed as "15 minutes". Note that the absolute value of the value is always used.The value can be a property expression. In this case, the scheduler attempts to use the configured value instead:
@Scheduled(overdueGracePeriod = "${myJob.overdueExpression}"). Additionally, the property expression can specify a default value:@Scheduled(overdueGracePeriod = "${myJob.overdueExpression:5m}").- Returns:
- the period expression based on the ISO-8601 duration format
PnDTnHnMn.nS
- Default:
- ""
-
timeZone
String timeZoneThe time zone ID for thecron().The cron expression is evaluated in the context of the default time zone. However, it is also possible to associate the cron expression with a specific time zone. The time zone ID is parsed using
ZoneId.of(String).The value can be a property expression. In this case, the scheduler attempts to use the configured value instead:
@Scheduled(timeZone = "${myJob.timeZone}"). Additionally, the property expression can specify a default value:@Scheduled(timeZone = "${myJob.timeZone:Europe/Prague}").The time zone is ignored for interval jobs specified via
every().- Returns:
- the time zone ID
- See Also:
- Default:
- "<<default timezone>>"
-