Spring batch 在Spring批处理中是否可以将停止作业的对象设置为等于null?
接下来,为了在某些情况下停止作业,我们可以抛出RuntimeException: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
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。在任何情况下,作业的区块事务都将回滚,并且不会持久化到数据库
我的意思是ItemWriter不会将“isPoisonBill”项目写入数据库。不会,它不会插入数据库,因为区块中的整个事务将失败。当您从项目处理器返回
null
时,该项目将被过滤掉,不会发送给编写器进行写入我想更深入地了解此解决方案的安全性或性能
:返回null和从处理器抛出异常都是安全的,但用于不同的用例:一个将过滤掉项目,另一个将停止作业。这两种方式都不应影响性能。
public T process(T item) throws Exception {
if (isPoisonPill(item)) {
item = null;
}
return item;
}