diff --git a/spring/spring boot/Spring Boot Async.md b/spring/spring boot/Spring Boot Async.md index 9f66eb5..ef02e37 100644 --- a/spring/spring boot/Spring Boot Async.md +++ b/spring/spring boot/Spring Boot Async.md @@ -70,3 +70,31 @@ public interface TaskScheduler { > > **通常,TaskScheduler默认情况下是单线程执行的,故而fixed rate执行时,如果一个Task执行时间超过period时,在当前task执行完成之前,下一个task并不会开始执行。下一个task会等待当前task执行完成之后立马执行。** +### Trigger接口 +Trigger接口的核心理念是下次执行事件由上次执行的结果决定。上次执行的结果存储在TriggerContext中。 +Trigger接口如下: +```java +public interface Trigger { + + Date nextExecutionTime(TriggerContext triggerContext); +} +``` +TriggerContext接口如下:(其具有默认的实现类SimpleTriggerContext) +```java +public interface TriggerContext { + + Date lastScheduledExecutionTime(); + + Date lastActualExecutionTime(); + + Date lastCompletionTime(); +} +``` +### Trigger实现类 +Spring为Trigger提供了两个实现类,其中CronTrigger允许task的调度按照cron expression来执行(类似linux中的crond)。 +```java +scheduler.schedule(task, new CronTrigger("0 15 9-17 * * MON-FRI")); +``` +Spring的另一个Trigger实现是PeriodicTrigger,其接受一个固定的period期间,一个可选的初始delay值,并接收一个boolean值标识该period是fixed-rate还是fixed-delay。 +### TaskScheduler实现类 +如果不需要外部的线程管理,可以使用spring提供的ThreadPoolTaskScheduler,其会将任务委托给ScheduledExecutorService来提供bean-properties形式的配置。 \ No newline at end of file