Я хотел бы уточнить детали метода 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");
}
}
то, чтобы проверить это, у меня есть unit test, который пытается запланировать два экземпляра этого задания один за другим. Я ожидал увидеть предупреждение при попытке запланировать вторую работу, однако вместо этого я получаю это исключение:
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.
Когда я запускаю этот unit test в режиме отладки, с разрывом в этой строке:
Список currentJobs = scheduler.getCurrentlyExecutingJobs();
Я вижу, что список пуст, поэтому планировщик не видит это задание как запущенное, но ему все еще не удается запланировать его снова, что говорит мне, что работа действительно выполнялась в то время...
Я пропустил некоторые тонкие точки с помощью этого метода планировщика?
Спасибо!
Марина