运行 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()

检索工作数据