当我尝试以每分钟一分钟的相同cron表达式(0 * * * *?)计划两个不同的作业时,仅触发一个触发器。我几乎尝试了一切,但没有任何效果。我还传递了参数spring.quartz.properties.org.quartz.scheduler.batchTriggerAcquisitionMaxCount=10
,但没有成功。一分钟内至少触发一次,有时一分钟触发两次,但一分钟内不会连续触发两个触发。我做错什么了吗?
编辑:我在db上检查了Next_Fire_Time是否正在更新,但没有触发,甚至没有触发或否决,正如我从触发器侦听器中看到的那样。
public class GlobalTriggerListener implements TriggerListener {
private static final String TRIGGER_LISTENER_NAME = "GlobalTriggerListener";
@Override
public String getName() {
return TRIGGER_LISTENER_NAME;
}
@Override
public void triggerFired(Trigger trigger, JobExecutionContext context) {
String triggerName = context.getJobDetail().getKey().toString();
System.out.println("triggerFired");
System.out.println("trigger : " + triggerName + " is fired");
}
@Override
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
boolean veto = false;
System.out.println("Veto Job Excecution trigger: " + veto);
return veto;
}
@Override
public void triggerMisfired(Trigger trigger) {
System.out.println(getName() + " trigger: " + trigger.getKey() + " misfired at " + trigger.getStartTime());
}
@Override
public void triggerComplete(Trigger trigger, JobExecutionContext context, Trigger.CompletedExecutionInstruction triggerInstructionCode) {
System.out.println(getName() + " trigger: " + trigger.getKey() + " completed at " + trigger.getStartTime());
}
}
private JobDetail buildJobDetail(ScheduledProcess sProcess) {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put(JOB_DATA_KEY, sProcess.getSpid());
return JobBuilder.newJob(ProcessStarterJob.class)
.withIdentity(UUID.randomUUID().toString(), "scheduled-processes")
.withDescription("Start Process Job")
.usingJobData(jobDataMap)
.storeDurably()
.build();
}
private Trigger buildJobTrigger(JobDetail jobDetail, ScheduledProcess sProcess) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date startDate = formatter.parse(sProcess.getStartDate());
Date endDate = formatter.parse(sProcess.getEndDate());
return TriggerBuilder.newTrigger()
.withIdentity(jobDetail.getKey().getName(), "scheduled-processes-triggers")
.withDescription("Start Process Trigger")
.startAt(startDate)
.endAt(endDate)
.withSchedule(CronScheduleBuilder.cronSchedule(sProcess.getQuartzDef()).withMisfireHandlingInstructionDoNothing())
.build();
}
答案 0 :(得分:0)
有趣但真实。我认为这是我第三次成为Eclipse的受害者。尽管我看不到任何在eclipse上运行的实例,但我的石英应用程序始终有一个运行不时的实例,我偶然在Task Manager上看到了它。但是我什至调试了石英源代码:)
因此,如果您遇到我遇到的相同问题,首先请确保没有在任何地方运行您的应用程序的任何其他实例,这也可能是另一个正在使用您的石英数据库的石英应用程序。当我开始怀疑是否还有其他正在运行的实例时,我看到触发器NEXT_FIRE_TIME正在更新,因为它必须进行更新,但是我没有看到触发器监听器发生任何火灾。
希望这些可以帮助您识别问题。