运行 2 个部分通过一个 cron 作业
Run 2 parts through one cron job
我正在使用带有 cron 的 quartz 来安排 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();
}
}}
我的两个 class 用于 运行 两份工作的是:
public class FirstInvoiceGeneration implements Job {
@Override
public void execute(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("Listener running.");
}
}
我的第二份 class 第二份工作是
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 )。但我只想让一个 class 在时间为中午 12 点时执行一个代码,而在时间为下午 2 点时执行另一个代码。那么有人可以告诉我该怎么做吗?
Reference。如您所见,您可以通过 usingJobData()
方法将数据发送到作业,例如("WORK","FIRST"),("WORK","SECOND")
.
在单个作业中 class 仅检查 WORK
键并相应地执行您想要执行的操作。 JobExecutionContext 您可以使用 context.getJobDetails().getJobDataMap()
检索工作数据
我正在使用带有 cron 的 quartz 来安排 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();
}
}}
我的两个 class 用于 运行 两份工作的是:
public class FirstInvoiceGeneration implements Job {
@Override
public void execute(JobExecutionContext arg0)
throws JobExecutionException {
System.out.println("Listener running.");
}
}
我的第二份 class 第二份工作是
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 )。但我只想让一个 class 在时间为中午 12 点时执行一个代码,而在时间为下午 2 点时执行另一个代码。那么有人可以告诉我该怎么做吗?
Reference。如您所见,您可以通过 usingJobData()
方法将数据发送到作业,例如("WORK","FIRST"),("WORK","SECOND")
.
在单个作业中 class 仅检查 WORK
键并相应地执行您想要执行的操作。 JobExecutionContext 您可以使用 context.getJobDetails().getJobDataMap()