Quartz调度程序,知道作业何时完成

时间:2012-11-12 22:26:22

标签: java quartz-scheduler

我的情况依赖于知道工作何时完成。

基本上,单身经理会跟踪一堆工作及其日程安排。假设B跟随A,当A执行调度程序删除B的作业并将其重新安排为更接近A时。

我遇到的问题是在作业完成时通知经理

public class Action extends ScheduledEvent implements Job {

    public Action() {
    }

    protected Action(String name, MomentInTime momentInTime, FireEventFrequency repeatFrequency) throws SchedulerException {
        super(momentInTime, repeatFrequency);
    }

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // Do some work
        EventScheduleManager.getInstance().eventComplete(this);

    }
}

我意识到为什么会发生这种情况是由于反思并且在调度时this被重新初始化并且现在已经被管理者所知。

周围有办法吗?您如何通知经理实体其预定的工作已完成?

3 个答案:

答案 0 :(得分:2)

我最终将工作名称传回给经理

   EventScheduleManager.getInstance().eventComplete
        (jobExecutionContext.getJobDetail().getName());

经理本身维持Map<String,ScheduledEvent>从那里拿走了

答案 1 :(得分:1)

您可以创建一个包装器,如下所示:

public class DoubleAction extends ScheduledEvent implements Job {
    private final Job job1,job2;

    public DoubleAction(Job job1, Job job2) {
       this.job1=job1;
       this.job2=job2;
    }

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
       job1.execute(jobExecutionContext);
       job2.execute(jobExecutionContext);
    }
}

答案 2 :(得分:0)

据我所知,他们对基于工作流程的工作的建议(你必须保证一个工作跟随另一个)是让第一个工作为其继任者创建一个条目,以便在完成时立即执行。