我在与Quartz的触发器挣扎。我创建了一个通过cron表达式调用的服务,但它也是一个org.quartz.Job本身,这背后的想法是,一旦调用了服务,我检查一些变量并根据我的决定延迟(或不延迟)服务的执行1天;为此,我得到了DefaultScheduler
,创建了一个新的org.quartz.JobDetail
和一个org.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
永远不会被调用(当然,我已经测试过添加几分钟,而不是一天),是否有关于什么'继续?
任何帮助都会非常感激。
答案 0 :(得分:0)
正如@GuillaumePolet建议的那样,我已尝试删除isInStandByMode
条件,但仍无法正常工作。诀窍是用默认值(空)的参数替换构造函数,并通过setter方法设置变量。
感谢大家的帮助,亲切的问候