Я хотел бы уточнить детали метода scheduler.getCurrentlyExecutingJobs () в Quartz1.6. У меня есть задание, в котором в любой момент должен быть запущен только один экземпляр. Это может быть запускается "запустить сейчас" из пользовательского интерфейса, но если экземпляр задания уже запущен для этого задания - ничего не должно произойти.
Вот как я проверяю, есть ли запущенное задание, которое меня интересует:
List<JobExecutionContext> currentJobs = scheduler.getCurrentlyExecutingJobs();
for (JobExecutionContext jobCtx: currentJobs){
jobName = jobCtx.getJobDetail().getName();
groupName = jobCtx.getJobDetail().getGroup();
if (jobName.equalsIgnoreCase("job_I_am_looking_for_name") &&
groupName.equalsIgnoreCase("job_group_I_am_looking_for_name")) {
//found it!
logger.warn("the job is already running - do nothing");
}
}
затем, чтобы проверить это , У меня есть модульный тест, который пытается запланировать два экземпляра этого задания один за другим. Я ожидал увидеть предупреждение при попытке запланировать второе задание, однако вместо этого я получаю следующее исключение:
org.quartz.ObjectAlreadyExistsException: Unable to store Job with name:
'job_I_am_looking_for_name' and group: 'job_group_I_am_looking_for_name',
because one already exists with this identification.
Когда Я запускаю этот модульный тест в режиме отладки с разрывом в этой строке:
List currentJobs = scheduler.getCurrentlyExecutingJobs ();
Я вижу, что список пуст - поэтому планировщик не видит это задание как выполняющееся , но он по-прежнему не может запланировать его снова - это говорит мне, что задание действительно выполнялось в то время ...
Я упустил некоторые тонкости с этот метод планировщика?
Спасибо!
Марина