我正在使用石英和cron来安排2个工作。一个在12:00运行,另一个运行在14:00运行完美。这是我的代码。
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
JobDetail job1 = JobBuilder.newJob(FirstInvoiceGeneration.class)
.withIdentity("FirstInvoiceGenerationJob", "group1").build();
Trigger trigger1 = TriggerBuilder
.newTrigger()
.withIdentity("FirstInvoiceGenerationTrigger", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 12 * * ?")).build();
//Simple invoice generation to check which invoice to be generated today
JobDetail job2 = JobBuilder.newJob(TodayInvoiceGeneration.class)
.withIdentity("TodayInvoiceGenerationJob", "group1").build();
Trigger trigger2 = TriggerBuilder
.newTrigger()
.withIdentity("TodayInvoiceGenerationTrigger", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule(0 0 14 * * ?")).build();
//Schedule it
Scheduler scheduler;
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job1, trigger1);
scheduler.scheduleJob(job2, trigger2);
} catch (SchedulerException e) {
e.printStackTrace();
}
}}
我运行两个工作的两个课程是:
public class FirstInvoiceGeneration implements Job {
@Override
public void execute(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("Listener running.");
}
}
我的第二堂课是
public class FirstInvoiceGeneration implements Job {
@Override
public void execute(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("Listener running.");
}
}
现在这完全运行,但我想要做的是拥有一个运行这两个代码的作业。现在我可以使用这个cron表达式 - > “0 0 12,14 * *?” 这将使工作在下午12点,下午2点运行(我的猜测:p)。但我希望只有一个类在时间是12pm时执行一个代码,而其他类在时间是下午2点时执行。那么有人能告诉我我该怎么做吗?
答案 0 :(得分:1)
Reference。如您所见,您可以通过usingJobData()
方法将作业数据发送到作业,例如("WORK","FIRST"),("WORK","SECOND")
。
在单个作业类中,只检查WORK
键,然后执行您要执行的操作。 JobExecutionContext您可以使用context.getJobDetails().getJobDataMap()