Spring batch 在Spring批处理中是否可以将停止作业的对象设置为等于null?

Spring batch 在Spring批处理中是否可以将停止作业的对象设置为等于null?,spring-batch,Spring Batch,接下来,为了在某些情况下停止作业,我们可以抛出RuntimeException: public class PoisonPillItemProcessor<T> implements ItemProcessor<T, T> { @Override public T process(T item) throws Exception { if (isPoisonPill(item)) { throw new Poiso

接下来,为了在某些情况下停止作业,我们可以抛出RuntimeException:

public class PoisonPillItemProcessor<T> implements ItemProcessor<T, T> {

    @Override
    public T process(T item) throws Exception {
        if (isPoisonPill(item)) {
            throw new PoisonPillException("Poison pill detected: " + item);
        }
        return item;
    }
}

我尝试过,结果是ItemWriter不会将“isPoisonBill”项插入数据库。但我想更深入地了解此解决方案的安全性或性能。它被接受了吗?

我们可以执行上述操作以手动使作业失败,也可以执行以下操作以将作业退出设置为1。在任何情况下,作业的区块事务都将回滚,并且不会持久化到数据库

  • 自动关联JobExecutionContext

    @值(“#{stepExecution.jobExecution}”) 私人作业执行作业执行

  • 确保处理器bean的作用域定义为job

    @范围(“工作”)

  • 将退出状态设置为失败

    jobExecution.setExitStatus(ExitStatus.FAILED)


  • 我的意思是ItemWriter不会将“isPoisonBill”项目写入数据库。不会,它不会插入数据库,因为区块中的整个事务将失败。当您从项目处理器返回
    null
    时,该项目将被过滤掉,不会发送给编写器进行写入
    我想更深入地了解此解决方案的安全性或性能
    :返回null和从处理器抛出异常都是安全的,但用于不同的用例:一个将过滤掉项目,另一个将停止作业。这两种方式都不应影响性能。
    public T process(T item) throws Exception {
        if (isPoisonPill(item)) {
            item = null;
        }
        return item;
    }