Preface
这几天做开发时有个比较特别的需求:当前时间的分钟数在 {5, 15, 25, 35, 45, 55} 的时候触发某个事件。Spring 自带的触发器(包括 Cron)都没法满足这个需求,于是就只能自定义一个触发器了。
Trigger
接口
写个类实现 org.springframework.scheduling.Trigger
,接口里唯一的一个方法 nextExecutionTime(TriggerContext): Date
需要返回一个 Date
类型的对象,表示下一次执行任务的时间。
1 | class ExampleTaskTrigger : Trigger { |
nextExecutionTime
方法会在两种情况下调用:
- Spring 容器启动时
- 定时任务执行完成后
注册定时任务
参考下面的 Spring 配置文件。ExampleClass
类没有继承任何类或实现任何方法,类内只有一个无参数的 taskMethod
方法。
1 |
|
配置完成后,Spring 就会询问 exampleTaskTrigger.nextExecutionTime(TriggerContext)
来决定什么时候执行 exampleClassBean.taskMethod()
。