当我调用调度程序时,我需要立即执行调度程序,下次它将根据 cron 表达式执行。但这里我的代码仅在 10 分钟后执行,但在运行此类/应用程序时不执行。
QuartzConfigure.java用于注册和调用execute方法:
public class QuartzConfigure {
public static void main(String args[]) throws Exception {
// specify the job' s details..
JobDetail job = JobBuilder.newJob(QuartzSchduleJob.class)
.withIdentity("testJob")
.build();
//this is specify using chron expression using chrone expression
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("Group2")
.withSchedule(CronScheduleBuilder.cronSchedule("0 /10 * * * ?"))
.startNow().build();
//schedule the job
SchedulerFactory schFactory = new StdSchedulerFactory();
Scheduler sch = schFactory.getScheduler();
sch.start();
sch.scheduleJob(job, trigger);
}
}
QuartzSchduleJob.java 用于作业:
public class QuartzSchduleJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("calling jobSchedulling::"+System.currentTimeMillis());
}
}
最佳答案
使用您当前的代码,您的“调度程序”在 sch.start()
之后立即启动,所以我猜您想知道如何在“调度程序”启动时强制触发您的作业。
如果是这样,您无法仅使用 cron 表达式来实现此目的,但我为您提供了两个解决方案。
如果您希望作业在开始时触发,然后每十分钟触发一次,请考虑使用
SimpleScheduleBuilder
。在您的代码中,替换CronExpressionSchedule
:Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("trigger1", "Group2") .withSchedule(ScheduleBuilder.simpleSchedule() .withIntervalInMinutes(10) .repeatForever()) .startNow() .build();
如果您希望作业在开始时触发,然后根据您的 Cron 表达式进行调度。考虑使用第二个触发器:
[...] Trigger trigger2 = TriggerBuilder.newTrigger() .withIdentity("trigger2", "Group2") .withSchedule(ScheduleBuilder.simpleSchedule()) .startNow() .build(); [...] sch.start(); sch.scheduleJob(job, trigger); sch.scheduleJob(job, trigger2);
关于java Quartz2 cron触发器没有立即触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25843425/