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