我正在寻找一种最佳方法来确定弹簧批处理作业是否已完成,而不涉及使用作业监听器。我正在使用符合jsr的组件。没有工作监听器的原因是我不希望依赖最终用户正确定义他们的工作来包含监听器。
到目前为止,我提出的唯一方法是将它放在调用start / restart的类中
executionID = jobOperator.start(jobName, properties);
BatchStatus status = jobOperator.getJobExecution(executionID).getBatchStatus();
while(status != BatchStatus.ABANDONED && status != BatchStatus.COMPLETED && status != BatchStatus.FAILED &&
status != BatchStatus.STOPPED){
Thread.sleep(1000);
status = jobOperator.getJobExecution(executionID).getBatchStatus();
}
我在这里遇到的问题是查询数据库,并且在相当长时间运行的作业中,这可以查询数千次获取状态的数据库。似乎应该有一个更好的方法。在内存中某些操作符或其他对象将具有作业的当前状态而不必转到数据库的位置。或者可能是一种无需在作业规范中定义回调的方法。
答案 0 :(得分:0)
如何将Job Listener放入父作业XML并从所有作业XML继承它?像这个例子的早期部分:https://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-4-job-inheritance/
将Job Listener放在所有作业XML上似乎很容易被遗漏,但我认为设置父作业XML更好,更容易维护。