Spring batch ItemWriter完成后如何执行逻辑?

Spring batch ItemWriter完成后如何执行逻辑?,spring-batch,Spring Batch,大家好,我是SO和Springbatch的新手。我已经用Classifier编写了一个批处理作业,根据通过ItemReader检索到的内容以及所有正常工作的内容,以两种不同的方式(即两个ItemWriter)更新表。现在,我想在ItemWriter完成更新后执行一些逻辑。我想做一些日志记录,并用以前检索到的相同数据集更新另一个表。我怎样才能做到这一点?我查看了ItemWriterListener,但它似乎无法执行特定于数据的逻辑。我做了一些搜索,但没有运气。任何帮助都将不胜感激。提前谢谢 一旦I

大家好,我是SO和Springbatch的新手。我已经用Classifier编写了一个批处理作业,根据通过ItemReader检索到的内容以及所有正常工作的内容,以两种不同的方式(即两个ItemWriter)更新表。现在,我想在ItemWriter完成更新后执行一些逻辑。我想做一些日志记录,并用以前检索到的相同数据集更新另一个表。我怎样才能做到这一点?我查看了ItemWriterListener,但它似乎无法执行特定于数据的逻辑。我做了一些搜索,但没有运气。任何帮助都将不胜感激。提前谢谢

一旦ItemWriter执行完毕,您可以尝试使用StepExecutionListener将其实现到Writer类,以执行逻辑。下面是ItemWriter的一个片段,供您参考

public class TestWriter implements ItemWriter<Test>, StepExecutionListener {

   @Override
   public void beforeStep(StepExecution stepExecution) {

   }

   @Override
   public void write(List<? extends Test> items) throws Exception {
        // Logic of Writer
   }


   @Override
   public ExitStatus afterStep(StepExecution stepExecution) {

       // You can perform post logic after writer here inside afterStep based on your requirements

       // Return custom exit status based on the run

       return ExitStatus.COMPLETED;
   }
}
公共类TestWriter实现ItemWriter、StepExecutionListener{
@凌驾
预处理前的公共无效(步骤执行步骤执行){
}
@凌驾
公共空白写入(列表)
现在,我想在更新ItemWriter之后执行一些逻辑。我想做一些日志记录,并使用以前检索到的相同数据集更新另一个表。我如何实现这一点?我查看了ItemWriterListener,但它似乎无法执行特定于数据的逻辑

由于您希望对以前检索到的相同项执行某些操作,因此需要使用,因为此方法允许您访问刚刚编写的项

编辑:根据注释添加有关故障案例的详细信息


如果事务被回滚,将调用方法
ItemWriteListener\onWriteError
。请在小节中找到有关此操作的更多详细信息。

您是否需要每个区块的逻辑,或者您是否可以在该步骤后定义一个tasklet?为什么不能使用?查看ItemWriter Close方法,您可以在其中执行想要执行的操作orm.谢谢!我想这就是我要找的,除了它似乎是在提交之前调用的。如果提交失败,它还会执行吗?不,这是另一个将被调用的方法
#onWriteError
。我编辑了这个问题并提供了更多细节。如果有帮助,请接受它。