Spring 批处理 ItemWriter : post 读取和处理所有记录后处理
Spring Batch ItemWriter : post processing when all records have been read and processed
我的工作中有一个步骤 ItemReader/ItemProcessor/ItemWriter。
在我的 ItemWriter 中,我需要为每条记录递增一个变量,以便知道我的记录在文件中的行号。现在,当我处理单个文件时,我正在使用一个静态变量,它非常适合我想做的事情。问题是:我可以重新启动我的工作(使用不同的参数),并且当我在处理另一个文件之前没有重新启动我的应用程序时,我的变量在静态时不会重新启动到初始数字,我可以将我的计数器设置为“33”而不是 1...
我想我可以使用 stepContext 而不是使用静态变量来解决这个问题,但我不喜欢这种方式。我更喜欢在处理完所有记录时调用一个方法(类似于 FlatFileItemWriter 的 footerCallback),这样我就可以重置我的静态变量。实际上,我只是想避免使用 stepContext 方式。
对于 "classic" ItemWriter(不是平面文件的预定义方法)是否有类似的方法?或者另一种方法?
因为我只想在读取和处理整个文件后做一些处理,所以我发现我可以使用 StepExecutionListener 及其方法 afterStep。完成该步骤后,我可以重置我的静态变量(或做任何我想做的事),这样我就可以 运行 我的工作多次而不会出现我的静态字段值的问题。
我的工作中有一个步骤 ItemReader/ItemProcessor/ItemWriter。 在我的 ItemWriter 中,我需要为每条记录递增一个变量,以便知道我的记录在文件中的行号。现在,当我处理单个文件时,我正在使用一个静态变量,它非常适合我想做的事情。问题是:我可以重新启动我的工作(使用不同的参数),并且当我在处理另一个文件之前没有重新启动我的应用程序时,我的变量在静态时不会重新启动到初始数字,我可以将我的计数器设置为“33”而不是 1...
我想我可以使用 stepContext 而不是使用静态变量来解决这个问题,但我不喜欢这种方式。我更喜欢在处理完所有记录时调用一个方法(类似于 FlatFileItemWriter 的 footerCallback),这样我就可以重置我的静态变量。实际上,我只是想避免使用 stepContext 方式。
对于 "classic" ItemWriter(不是平面文件的预定义方法)是否有类似的方法?或者另一种方法?
因为我只想在读取和处理整个文件后做一些处理,所以我发现我可以使用 StepExecutionListener 及其方法 afterStep。完成该步骤后,我可以重置我的静态变量(或做任何我想做的事),这样我就可以 运行 我的工作多次而不会出现我的静态字段值的问题。