public interface ZonedTrigger extends Trigger
ManagedScheduledExecutorService
using any of the
schedule methods. Each method will run with unspecified context.
The methods can be made contextual through creating contextual
proxy objects using ContextService
.
Each trigger instance will be invoked within the same process in which it was registered.
Example:
/** * A trigger that runs on the hour, Mon-Fri from 8am-8pm Central US time. */ public class HourlyDuringBusinessHoursTrigger implements ZonedTrigger { static final ZoneId ZONE = ZoneId.of("America/Chicago"); public ZoneId getZoneId() { return ZONE; } public ZonedDateTime getNextRunTime(LastExecution lastExec, ZonedDateTime taskScheduledTime) { ZonedDateTime prevTime = lastExec == null ? taskScheduledTime : lastExec.getRunEnd(ZONE); ZonedDateTime nextTime = prevTime.truncatedTo(ChronoUnit.HOURS).plusHours(1); DayOfWeek day = nextTime.getDayOfWeek(); if (day.equals(DayOfWeek.SATURDAY) || day.equals(DayOfWeek.SUNDAY)) { nextTime = nextTime.truncatedTo(ChronoUnit.DAYS).plusDays(1).withHour(8); } else { // Mon-Fri 8am-8pm int hour = nextTime.getHour(); if (hour < 8) nextTime = nextTime.plusHours(8 - hour); else if (hour > 20) nextTime = nextTime.truncatedTo(ChronoUnit.DAYS) .plusDays(day.equals(DayOfWeek.FRIDAY) ? 3 : 1) .withHour(8); } return nextTime; } }
Modifier and Type | Method and Description |
---|---|
default java.util.Date |
getNextRunTime(LastExecution lastExecutionInfo,
java.util.Date taskScheduledTime)
Retrieve the next time that the task should run after.
|
java.time.ZonedDateTime |
getNextRunTime(LastExecution lastExecutionInfo,
java.time.ZonedDateTime taskScheduledTime)
Retrieve the next time that the task should run after.
|
default java.time.ZoneId |
getZoneId()
Returns the timezone to use for the
ZonedDateTime that is supplied to the
getNextRunTime and
skipRun methods. |
default boolean |
skipRun(LastExecution lastExecutionInfo,
java.util.Date scheduledRunTime)
Return true if this run instance should be skipped.
|
default boolean |
skipRun(LastExecution lastExecutionInfo,
java.time.ZonedDateTime scheduledRunTime)
Return true if this run instance should be skipped.
|
java.time.ZonedDateTime getNextRunTime(LastExecution lastExecutionInfo, java.time.ZonedDateTime taskScheduledTime)
lastExecutionInfo
- information about the last execution of the task.
This value will be null if the task has not yet run.taskScheduledTime
- the date/time at which the
ManagedScheduledExecutorService.schedule
method was invoked to schedule the task.default java.util.Date getNextRunTime(LastExecution lastExecutionInfo, java.util.Date taskScheduledTime)
This method is provided to maintain compatibility with Trigger
and should not be
implemented. The default implementation delegates to the method signature that
accepts and returns ZonedDateTime
.
getNextRunTime
in interface Trigger
lastExecutionInfo
- information about the last execution of the task.
This value will be null if the task has not yet run.taskScheduledTime
- the date/time at which the
ManagedScheduledExecutorService.schedule
method was invoked to schedule the task.java.lang.IllegalArgumentException
- if the next run time is too large to represent as a Date
.default java.time.ZoneId getZoneId()
ZonedDateTime
that is supplied to the
getNextRunTime
and
skipRun
methods.
The default implementation returns the system default timezone and should be overridden whenever there is chance that the server might not be running with the same timezone for which the business logic within this trigger is written.
default boolean skipRun(LastExecution lastExecutionInfo, java.time.ZonedDateTime scheduledRunTime)
This is useful if the task shouldn't run because it is late or if the task is paused or suspended.
Once this task is skipped, the state of its Future's result will throw a
SkippedException
. Unchecked exceptions will be wrapped in a
SkippedException
.
The default implementation returns false
, making it optional to
implement this method if you do not require support for skipped executions.
lastExecutionInfo
- information about the last execution of the task.
This value will be null if the task has not yet run.scheduledRunTime
- the date/time after which the execution of the task
is scheduled to start.default boolean skipRun(LastExecution lastExecutionInfo, java.util.Date scheduledRunTime)
This method is provided to maintain compatibility with Trigger
and should not be
implemented. The default implementation delegates to the method signature that
accepts ZonedDateTime
.
skipRun
in interface Trigger
lastExecutionInfo
- information about the last execution of the task.
This value will be null if the task has not yet run.scheduledRunTime
- the date/time after which the execution of the task
is scheduled to start.