Я бы хотел переназначить работу с кварцем. Я прошел через некоторые из полученных ответов (например, Как переназначить интервал выполнения задания в Кварце? ).
Что я хочу сделать, это:
Запланировать выполнение задания в указанное время
Перепланируйте задание так, чтобы оно повторялось каждые две минуты.
Так что в общем случае задание должно запускаться 3 раза.
Мой основной класс:
public class Main{
public static void main(String[] args) throws Exception {
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("dummyJobName", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0 41 16 1/1 * ? *"))
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
и класс задания:
public class HelloJob implements Job{
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("Hello Quartz! " + context.getTrigger().toString());
Trigger newTrigger = TriggerBuilder.newTrigger()
.withIdentity("dummyTriggerName", "group1")
.withSchedule(
SimpleScheduleBuilder.repeatMinutelyForTotalCount(2))
.build();
Trigger oldTrigger = context.getTrigger();
Scheduler scheduler = null;
try {
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.rescheduleJob(oldTrigger.getKey(), newTrigger);
} catch (SchedulerException e1) {
e1.printStackTrace();
}
}
}
Когда я запускаю код, он дает мне:
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
Hello Quartz! Trigger 'group1.dummyTriggerName': triggerClass: 'org.quartz.impl.triggers.SimpleTriggerImpl calendar: 'null' misfireInstruction: 0 nextFireTime: Sun Jun 02 16:42:00 CEST 2019
......
И это в консоли похоже на повторение много раз в секунду и не может остановиться. Исходный триггер срабатывает, как и ожидалось (это из основного класса), но при перепланировании в классе HelloJob он сходит с ума.
Я не понимаю, почему он так себя ведет. Что я делаю не так?