Spring batch Spring批处理将某些记录写入不同的文件重新启动问题

Spring batch Spring批处理将某些记录写入不同的文件重新启动问题,spring-batch,Spring Batch,我有一个Spring批处理作业,它从一个文件读取数据并写入两个平面文件(格式不同)。它使用具有两个委托的CompositeWriter,这两个委托是扩展FlatFileItemWriter的自定义类。每个作者只写某些记录。例如,对于14条输入记录,GoodFileWriter将写入12条记录,SkipFileWriter将只写入两条记录。这个很好用。但是,如果作业在中间失败,我重新启动它,好文件就丢失记录。SpringBatch似乎只维护其中一个文件的文件大小/记录计数。如果需要,我很乐意提供例

我有一个Spring批处理作业,它从一个文件读取数据并写入两个平面文件(格式不同)。它使用具有两个委托的CompositeWriter,这两个委托是扩展FlatFileItemWriter的自定义类。每个作者只写某些记录。例如,对于14条输入记录,GoodFileWriter将写入12条记录,SkipFileWriter将只写入两条记录。这个很好用。但是,如果作业在中间失败,我重新启动它,好文件就丢失记录。SpringBatch似乎只维护其中一个文件的文件大小/记录计数。如果需要,我很乐意提供例子

我不得不相信这只是因为我不能胜任SpringBatch的工作,所以任何指点都将不胜感激


谢谢你,没有看到你的代码,我只想SB不会为所有两个流保存状态,而是只为一个流保存状态。
你必须使用
中所述的“streams”元素手动注册你正在写入的所有流
只是一个建议:您已经为自定义编写器扩展了
FlatFileItemWriter
。对于SB,最好的解决方案是使用委托而不是扩展。如果可以使用
ItemStream
ItemWriter
或使用复合超类重写代码,请检查代码,因为注册流、扩展FlatFileItemWriter以及使用文件编写器委托实现ItemStream和ItemWriter都不起作用,下面是我给出的答案。我唯一地设置了writer的name属性;在Java类的构造函数或编写器的XML定义中。此方法可以扩展FlatFileItemWriter,也可以使用自定义编写器,通过FlatFileItemWriter委托实现ItemStream和ItemWriter。name属性来自ItemStreamSupport抽象类

Spring Batch将写入执行上下文中文件的量存储在name.writed键下。FlatFileItemWriter的默认名称为FlatFileItemWriter。因为我有两个FlatFileItemWriter,所以只有一个条目被写入了执行上下文。因为一个文件写入的内容比另一个文件多,所以重新启动时会发生损坏。唯一命名的作者解决了这个问题。如果有一个更合适的方法来处理这个问题,我会很高兴听到它

感谢卢卡·巴索·里奇(Luca Basso Ricci)为我指出了这一方向,他对Spring Batch没有为这两条溪流保存状态发表了评论