Я борюсь с триггерами кварца. Я создал службу, которая вызывается через выражение cron, но также и сама org.quartz.Job. Идея заключается в том, что после вызова службы я проверяю некоторые переменные и на основании этого решаю задерживать (или нет) исполнение услуги на 1 день; для этого я получаю DefaultScheduler
, создаю новый org.quartz.JobDetail
и org.quartz.SimpleTrigger
и планирую их. Как вы можете догадаться, он не работает, новый триггер никогда не запускается.
Quartz SimpleTrigger не стреляет
public class MyService implements MyInterface, org.quartz.Job {
@Override
//method declared in MyInterface
public void generateFile() {
org.quartz.Scheduler scheduler;
try {
scheduler = org.quartz.impl.StdSchedulerFactory.getDefaultScheduler();
} catch (SchedulerException e1) {
scheduler = null;
}
if (condition) {
//regular processing
} else {
try {
org.quartz.JobDetail jobDetail;
SimpleTrigger simpleTrigger;
String name = "jobName";
if (scheduler != null && scheduler.isInStandbyMode()){
jobDetail = new org.quartz.JobDetail(name, org.quartz.Scheduler.DEFAULT_GROUP, MyService.class);
jobDetail.getJobDataMap().put("myService", this);
Calendar c = Calendar.getInstance();
int date = c.get(Calendar.DATE);
c.set(Calendar.DATE, date + 1);
simpleTrigger = new SimpleTrigger("simpleTrig", c.getTime());
simpleTrigger.setJobName(name);
jobDetail.setDurability(true);
scheduler.addJob(jobDetail, true);
scheduler.scheduleJob(simpleTrigger);
//also tested with
//scheduler.scheduleJob(jobDetail, simpleTrigger);
//and same result
scheduler.start();
}
else{
scheduler.shutdown();
}
} catch (java.text.ParseException e) {
}
catch (org.quartz.SchedulerException ex) {
}
}
}
@Override
public void execute(JobExecutionContext jobContext) throws JobExecutionException {
MyInterface jobParamLogService = (MyInterface)jobContext.getJobDetail().getJobDataMap().get("myService");
jobParamLogService.generateFile();
}
Как я сказал, моя проблема заключается в том, что SimpleTrigger
никогда не будет вызываться (в выключенном состоянии, конечно, я проверил, добавив несколько минут, а не в день), делает любой имеет любой совет о том, что происходит?
Любая помощь была бы действительно оценена.
Первое, что вам нужно сделать, это правильно обрабатывать ваши исключения. Из-за проблемы вы не можете добавлять задание в планировщик. Либо регистрируйте трассировку сообщения/стека, либо что-то действительно важно –
Привет @ChrisHinshaw, спасибо за ваш комментарий, код, который я вам показывал, - это просто упрощенная версия, я обрабатываю исключения, но никто не бросает – maxivis
2 вещи здесь : 1) Почему вы просматриваете свой экземпляр службы таким сложным способом, что можете просто вызвать 'this.generateFile()' напрямую (исключение 'this.' - это одно и то же) 2) Почему вы используете статический вызов планировщика по умолчанию, когда вы можете получить доступ к фактическому планировщику непосредственно из JobExecutionContext, предоставленного вашей работе? Я предполагаю, что ваше состояние на самом деле ложно или вы получаете доступ к неправильному планировщику, и в конечном итоге ничего не происходит. –