Spring batch Spring Batch ItemWriter:读取和处理所有记录后的后处理

Spring batch Spring Batch ItemWriter:读取和处理所有记录后的后处理,spring-batch,writer,Spring Batch,Writer,我的工作中有一个步骤是使用ItemReader/ItemProcessor/ItemWriter。 在ItemWriter中,我需要为每条记录增加一个变量,以便知道文件中记录的行号。现在,我正在使用一个静态变量,当我处理单个文件时,它可以很好地完成我想要做的事情。问题是:我可以重新启动我的作业(使用不同的参数),当我处理另一个文件而之前没有重新启动我的应用程序时,我的变量在静态时不会重新启动到初始值,我可以将计数器设置为“33”而不是1 我想我可以使用stepContext来解决这个问题,而不是

我的工作中有一个步骤是使用ItemReader/ItemProcessor/ItemWriter。 在ItemWriter中,我需要为每条记录增加一个变量,以便知道文件中记录的行号。现在,我正在使用一个静态变量,当我处理单个文件时,它可以很好地完成我想要做的事情。问题是:我可以重新启动我的作业(使用不同的参数),当我处理另一个文件而之前没有重新启动我的应用程序时,我的变量在静态时不会重新启动到初始值,我可以将计数器设置为“33”而不是1

我想我可以使用stepContext来解决这个问题,而不是使用静态变量,但我不喜欢这种方式。我希望在处理完所有记录后调用一个方法(类似于FlatFileItemWriter的footerCallback),这样我就可以重置静态变量。事实上,我只是想避免这种方式


对于“经典”ItemWriter(而不是平面文件的预定义ItemWriter),是否有类似的方法?或者另一种方法?

因为我只想在读取和处理整个文件后进行一些处理,所以我发现我可以使用StepExecutionListener及其方法afterStep。当步骤完成时,我可以重置静态变量(或执行任何我想要的操作),这样我就可以多次运行我的作业,而不会出现静态字段值的问题。

“但我不喜欢这种方式”你能详细说明为什么不喜欢它吗?@MichaelPralow:对于这种特殊情况(增加计数器)没问题,但我必须在另一个步骤中做一个更复杂的ItemWriter,这需要在读取和处理整个文件后获得一个对象列表并处理一些内容。这就是为什么我现在更喜欢使用回调,即使stepContext在这里可以正常工作。