通过一个cron作业运行2个部分

时间:2015-10-19 04:30:44

标签: java servlets cron

我正在使用石英和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点时执行。那么有人能告诉我我该怎么做吗?

1 个答案:

答案 0 :(得分:1)

Reference。如您所见,您可以通过usingJobData()方法将作业数据发送到作业,例如("WORK","FIRST"),("WORK","SECOND")

在单个作业类中,只检查WORK键,然后执行您要执行的操作。 JobExecutionContext您可以使用context.getJobDetails().getJobDataMap()

检索作业数据