用于块作业的Java EE 7 Batch Processor onStop

时间:2014-06-30 10:35:47

标签: java batch-processing

我在http://www.oracle.com/technetwork/articles/java/batch-1965499.html上阅读了一些关于Java EE 7.0批处理器的内容。如上所述,有两种工作类型,面向块和面向任务。我正在使用面向块的方法,但问题是当我停止工作时我找不到捕获Stop事件的方法。我看到在面向任务的作业中,您可以覆盖onStop方法,但不能覆盖块作业。

任何人都知道如何处理大块作业中的停止事件?

1 个答案:

答案 0 :(得分:0)

似乎在大块步骤中无法获得主动通知。 您可以做什么:在代码中的某些位置检查BatchStatus是否“停止”或“停止”并对其做出反应。

对于我的自定义Batchlets(面向任务的步骤)我正在使用提供以下方法的公共父类:

protected boolean isStopped() {
    if (BatchStatus.STOPPED.equals(jobContext.getBatchStatus())
        || BatchStatus.STOPPING.equals(jobContext.getBatchStatus())) {
        return true;
    }
    return false;
}

此条件检查也应该在块操作或AbstractItemReader,AbstractItemWriter的继承类以及ItemProcessor的实现中起作用。

这也是在小程序作业中正常处理停止事件的好方法,因为停止事件是在运行小程序进程方法的线程以外的线程上执行的。 通过在面向任务的作业中进行战术性停止检查,您可以确保在jobContext要求停止时,您没有遇到性能和/或耗时的操作。