日常提交
This commit is contained in:
@@ -70,3 +70,31 @@ public interface TaskScheduler {
|
|||||||
>
|
>
|
||||||
> **通常,TaskScheduler默认情况下是单线程执行的,故而fixed rate执行时,如果一个Task执行时间超过period时,在当前task执行完成之前,下一个task并不会开始执行。下一个task会等待当前task执行完成之后立马执行。**
|
> **通常,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形式的配置。
|
||||||
Reference in New Issue
Block a user