我使用石英與cron來安排2個工作。一個運行在12:00,另一個在14:00,它運行完美。這是我的代碼。通過一個cron作業運行2個零件
@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.");
}
}
現在這個運行完美,但我想要做的是有1個工作運行這兩個代碼。現在我可以使用這個cron表達式 - >「0 0 12,14 * *?」 這將使工作在下午12點,下午2點(我的猜測:p)運行。但是我想只有一個類在時間爲12點時執行一個代碼,而其他時間在下午2點時執行。那麼有人能告訴我我該怎麼做嗎?
檢索作業數據爲什麼你想要在一個cron行中運行這些數據? (我可以看到使它工作的唯一方法是有一個函數,看看它是什麼時間,並決定調用哪個類,這是可怕的。)有一個正常的方法來做到這一點(兩個cron行),還有奇怪的做法(一個cron行);如果你要問如何實現這種怪異的方式,你還應該說你爲什麼決定不按正常的方式去做。 – Amadan
你可以通過命令行參數傳遞給你的應用程序來說哪一段代碼? –
其實我必須運行兩個大的查詢,將運行2-3小時,所以先生說,也許這兩個工作可能會相互碰撞。他說可能不是線程安全的。是嗎?我對石英和這一切都非常陌生。所以他說最好在一份工作中做到安全。 –