背景
最近开发项目,要支持三种任务调度,立即执行、指定时间一次执、一定周期内指定时间执行,。用quartz scheduler来完成这些功能,总结下使用下来的经验。
-
代码运行中Scheduler中动态加入Trigger
在spring Bean 的类中选完成Scheduler的建立,可在实现了InitializingBean的afterPropertiesSet()方法里
@Override
public void afterPropertiesSet() throws Exception {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
try {
scheduler = schedulerFactory.getScheduler();
logger.info("------- Initialization Complete --------");
logger.info("------- Scheduling Jobs ----------------");
logger.info("查找未执行的job");
scheduler.start();
} catch (SchedulerException e) {
logger.error(e.getMessage());
}
}
2. Trigger的建立
- Trigger立即触发
TriggerBuilder.newTrigger().startNow().build();
- Trigger指定时间触发
TriggerBuilder.newTrigger().startAt(time).build();
- Trigger指定周期时间触发,即corn方式
TriggerBuilder.newTrigger().startNow().endAt(endTime)
.withSchedule(dailyAtHourAndMinute(start.getHours(), start.getMinutes()))
.build();
3. 停止一个Job
scheduler提供了interrupt()方法,这个方法是中断当前正在执行的Job,要移除了个在scheduler里面待执行的Job,通过调用 scheduler.deleteJob()