Quartz Scheduler作业序列/工作流程

时间:2015-11-30 12:34:53

标签: java quartz-scheduler

我正在尝试执行一系列作业,其中一个作业执行另外两个,其中一个执行另一个。

Job 1 --> Job 3
      --> Job 2 -->Job 4

作业用于从db发送数据。 这就是我所做的

@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class MembersJob implements Job{
    List<Member>unsentMem=new ArrayList<Member>();
    JSONArray customerJson = new JSONArray();
    Depot depot;

    public MembersJob(){
        depot = new UserHandler().getDepot();
    }

    public void execute(JobExecutionContext jec) throws JobExecutionException {
        if ( Util.getStatus() ){

            runSucceedingJobs(jec);
        } else {
            System.out.println("No internet connection");
        }

    }

  public void runSucceedingJobs(JobExecutionContext context){
      JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
      Object milkCollectionJobObj = jobDataMap.get("milkCollectionJob");
      MilkCollectionsJob milkCollectionsJob = (MilkCollectionsJob)milkCollectionJobObj;

      Object productsJobObj = jobDataMap.get("milkCollectionJob");
      ProductsJob productsJob = (ProductsJob)productsJobObj;
    try {
        milkCollectionsJob.execute(context);
        productsJob.execute(context);
    } catch (JobExecutionException ex) {
        System.out.println("Error...");
        Logger.getLogger(MembersJob.class.getName()).log(Level.SEVERE, null, ex);
    }
  }
}

串联呼叫

//Members Job
    JobKey membersJobKey = new JobKey("salesJob", "group1");
    JobDetail membersJob = JobBuilder.newJob(MembersJob.class)
    .withIdentity(membersJobKey).build();
    membersJob.getJobDataMap().put("milkCollectionJob", new MilkCollectionsJob());
    membersJob.getJobDataMap().put("productsJob", new ProductsJob());

    //
    CronTrigger membersTrigger =  newTrigger()
                                .withIdentity("salesTrigger", "group1")
                                .withSchedule(
                                        cronSchedule("0/10 * * * * ?"))
                                .forJob(membersJobKey)
                                .build();

    Scheduler scheduler = new StdSchedulerFactory().getScheduler();
    scheduler.scheduleJob(membersJob, membersTrigger);
    scheduler.start();

问题是成员工作开始但在完成时不会启动其他工作。实现这一目标的最简单,最快捷的方法是什么?

0 个答案:

没有答案