功能需要 审计(即对不同规则的定制的东西进行轮巡)如果每一个轮询都是一个任务的话,则很影响效率,所以将其建成就一个任务,检查最小时间,将最小时间作为下次执行的时间,根据时间和任务传递过来的参数判断执行的是那个规则。
所以此处的任务应当满足,时间的更新,datamap参数的更新。
log.info("------- Initializing ----------------------");
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
System.out.println(sched.getSchedulerName());
log.info("------- Initialization Complete -----------");
Date runTime = DateBuilder.evenSecondDate(new Date());
log.info("------- Scheduling Job -------------------");
//job1、trigger1 用来审计
JobDetail job1 = JobBuilder.newJob(DelSchedule.class).withIdentity("job1", "group1").build();
Trigger trigger1 = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(runTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatHourlyForever(12)).build();
具体更新操作
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler("DefaultQuartzScheduler");
JobDetail jobDetail = scheduler.getJobDetail(JobKey.jobKey("job1", "group1"));
// retrieve the trigger
Trigger oldTrigger = scheduler.getTriggersOfJob(JobKey.jobKey("job1", "group1")).get(0);
// obtain a builder that would produce the trigger
TriggerBuilder tb = oldTrigger.getTriggerBuilder();
// update the schedule associated with the builder, and build the new trigger
// (other builder methods could be called, to change the trigger in any desired way)
Trigger newTrigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(minDate).withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatHourlyForever(12)).build();
jobDetail.getJobDataMap().put("id",newId);
scheduler.addJob(jobDetail, true);
scheduler.rescheduleJob(oldTrigger.getKey(), newTrigger);
对于其它一些需求或深入了解,可以进入官网详细了解http://quartz-scheduler.org/documentation/quartz-2.1.x/quick-start