我需要在调用调度程序时立即执行调度程序,下次它将基于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());
}
}
答案 0 :(得分:1)
使用您当前的代码,您的'日程安排程序'在sch.start()
之后立即开始,所以我猜你想要了解当你的调度员'启动。
如果是这样,你只能使用cron表达式来达到这个目的,但我有两个解决方案。
如果您希望在开始时触发作业,然后每隔十分钟触发一次,请考虑使用SimpleScheduleBuilder
。在您的代码中,替换CronExpressionSchedule
:
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "Group2")
.withSchedule(ScheduleBuilder.simpleSchedule()
.withIntervalInMinutes(10)
.repeatForever())
.startNow()
.build();
如果您希望Job在启动时触发,然后根据您的Cron表达式触发计划。考虑使用第二个触发器:
[...]
Trigger trigger2 = TriggerBuilder.newTrigger()
.withIdentity("trigger2", "Group2")
.withSchedule(ScheduleBuilder.simpleSchedule())
.startNow()
.build();
[...]
sch.start();
sch.scheduleJob(job, trigger);
sch.scheduleJob(job, trigger2);