Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Quartz


Автор: cosmonaft 18.3.2008, 19:03
Сразу после создания триггера начинает отрабатывать джоб. Вот такой код:
Код

...
SchedulerFactory sf = new StdSchedulerFactory("quartz.properties");
Scheduler sched = sf.getScheduler();
sched.start();

JobDetail job = new JobDetail("job", Scheduler.DEFAULT_GROUP, Job.class);
CronTrigger trigger = new CronTrigger("trigger", null, "0 0 8 * * ?");
trigger.setStartTime(getStartDate);
trigger.setEndTime(getEndDate);
sched.scheduleJob(job, trigger);

Раньше такого не замечал. Спустя некоторое время, когда вновь взялся зв кварц, появился этот глюк. 
С чем это может быть связано?



Автор: cosmonaft 18.3.2008, 20:04
Блин, и это еще не весь глюк. Сразу после создания триггера и джоба, они успешно сохраняются в соответствующие таблицы, но после отработки джоба удаляются оттуда. Я сижу в шоке!!! Что происходит?

Автор: Zamuta 18.3.2008, 22:22
cosmonaft, что за переменная getStartDate ? И зачем тебе setStartTime и setEndTime? Попробуй без них. Это CRON триггер. У тебя он выполняется 8:00:00 ежедневно, начало выполнения здесь у тебя в 8:00:00. (Trigger will fired...) 

По поводу таблиц покажи quartz.properties и какой JobStore используешь TX или CMT ?

Автор: cosmonaft 18.3.2008, 22:56
Zamuta, спасибо, ты меня спас!!! У меня моск чуть не отвалился...
Точно, все дело getStartDate. Там стояла прошедшая дата, поэтому и сразу отрабатывал джоб. Если поставть будущую дату, то все ОК. Однако хотелось бы знать как избежать этого срабатывания в случае прошледшей даты.

Даты getStartDate и  getEndDate нужны, т.к. это есть задаваемый юзером промежуток срабатывания. А в самом cron выражении такого не сделаешь.

Использую  JobStoreTX. Я понял почему происходит удаление из таблиц, однако что делать пока не знаю. Все дело в ДОЛБАНОМ хибернейте. Я в метод, что приведен выше передаю объект. И он каким-то хитровые...ым способом делает откат изменений...

Автор: Zamuta 18.3.2008, 23:18
cosmonaft, 
Цитата

Даты getStartDate и  getEndDate нужны, т.к. это есть задаваемый юзером промежуток срабатывания.

Почему не сделаешь? Например 0 0/5 8 * * ? начнёт запускаться в 8:00:00 и будет выполняться каждые 5 минут до 8:55:00.
Не стоит играться с setStartTime и endTime, это же не SimpleTrigger, а Cron.
Цитата

Все дело в ДОЛБАНОМ хибернейте.

Да, есть такое, кварц с хибернейтом не дружит, т.к. последний делает недоступной бд для кварца. Попробуй поиграться с JobStore. В книге Quartz Job Scheduling Framework есть подробное описание настроек.

Автор: cosmonaft 18.3.2008, 23:30
Цитата(Zamuta @ 18.3.2008,  23:18)
Почему не сделаешь? Например 0 0/5 8 * * ? начнёт запускаться в 8:00:00 и будет выполняться каждые 5 минут до 8:55:00.
Не стоит играться с setStartTime и endTime, это же не SimpleTrigger, а Cron.

Все дело в том, что юзер может задать даты срабатывания, например с 23.12.08 до 16.02.09. А такое условие в cron выражение не загонишь.

Автор: Zamuta 18.3.2008, 23:37
cosmonaft,  smile это же cron.  0 0 12 23-16 DEC-FEB * 2008-2009 или   0 0 12 23-16 12-2 * 2008-2009 .

Добавлено через 3 минуты и 45 секунд
Нет, дни неправильно. Уважаемый All, как правильно прописать дни? 

Автор: cosmonaft 19.3.2008, 11:04
А я тебе скажу как  smile , используя setStartTime и setEndTime. Даже в книге "Quartz Job Scheduling Framework" пример такой есть.

Автор: cosmonaft 19.3.2008, 12:14
Да, уж... 
Только, что разобрался почему происходило удаление триггеров и джобов. Опять же все дело оказалось в датах startDate и endDate, а не в хибернейте... Триггеры и джобы автоматом удаляются самим кварцом, если они больше не отработают, т.е. если в таблице, поле NEXT_FIRE_TIME будет больше поля END_TIME. Вот такой вот "сборщик мусора", йопта. И нигде не написано. И два дня в трубу...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)