我在http://www.oracle.com/technetwork/articles/java/batch-1965499.html上阅读了一些关于Java EE 7.0批处理器的内容。如上所述,有两种工作类型,面向块和面向任务。我正在使用面向块的方法,但问题是当我停止工作时我找不到捕获Stop事件的方法。我看到在面向任务的作业中,您可以覆盖onStop方法,但不能覆盖块作业。
任何人都知道如何处理大块作业中的停止事件?
答案 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要求停止时,您没有遇到性能和/或耗时的操作。