0

我正在寻找一种最佳方法来确定是否已完成不涉及使用作业侦听器的春季批处理作业。我正在使用符合 jsr 的组件。没有工作监听器的原因是我不想依赖最终用户正确定义他们的工作以包含监听器。

到目前为止我想出的唯一方法是将它放在调用启动/重启的类中

        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();
        }

我在这里遇到的问题是这会查询数据库,并且在相当长时间运行的作业中,这可能会查询数据库数千次以获取状态。似乎应该有更好的方法。操作员或其他对象在内存中的某些位置将具有作业的当前状态,而无需转到数据库。或者可能是一种无需在工作规范中定义的回调方法。

4

1 回答 1

0

将你的 Job Listener 放到父 Job XML 中并从你所有的 Job XML 中继承它怎么样?类似于此示例的早期部分:https ://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-4-job-inheritance/

将 Job Listener 放入所有作业 XML 似乎很容易错过,但我认为设置父作业 XML 更好且易于维护。

于 2015-09-11T23:32:15.633 回答