я создаю задание, запускающее класс bean-компонента Spring с этим кодом
MethodInvokingJobDetailFactoryBeanjobDetail = new MethodInvokingJobDetailFactoryBean();
Class<?> businessClass = Class.forName(task.getBusinessClassType());
jobDetail.setTargetObject(applicationContext.getBean(businessClass));
jobDetail.setTargetMethod(task.getBusinessMethod());
jobDetail.setName(task.getCode());
jobDetail.setGroup(task.getGroup().getCode());
jobDetail.setConcurrent(false);
Object[] argumentArray = builArgumentArray(task.getBusinessMethodParams());
jobDetail.setArguments(argumentArray);
jobDetail.afterPropertiesSet();
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(task.getCode() + "_TRIGGER", task.getGroup().getCode() + "_TRIGGER_GROUP")
.withSchedule(CronScheduleBuilder.cronSchedule(task.getCronExpression())).build();
dataSchedulazione = scheduler.scheduleJob((JobDetail) jobDetail.getObject(), trigger);
scheduler.start();
иногда задача перестает отвечать, если я удаляю триггер, а задача из планировщика остается вList ob = scheduler.getCurrentlyExecutingJobs();
Триггер находится в состоянии NONE, но все еще находится в scheduler.getCurrentlyExecutingJobs();
Я попытался внедрить InterruptableJob в класс, который расширяет MethodInvokingJobDetailFactoryBeanjobDetail.
Но когда я использую
scheduler.interrupt(jobKey);
В нем говорится, что InterruptableJob не реализован. Я думаю, потому что экземпляр класса — это MethodInvokingJobDetailFactoryBeanjobDetail.
`scheduler.scheduleJob((JobDetail) jobDetail.getObject(), trigger);`
это код внутри кварцевого планировщика
`job = jec.getJobInstance();
if (job instanceof InterruptableJob) {
((InterruptableJob)job).interrupt();
interrupted = true;
} else {
throw new UnableToInterruptJobException(
"Job " + jobDetail.getKey() +
" can not be interrupted, since it does not implement " +
InterruptableJob.class.getName());
}
`
Есть ли другой способ убить одну задачу?
Я использую Quartz 2.1.7 и java 1.6 и java 1.8
ТИА
Андреа