我有一个 Spring 批处理应用程序,我使用了面向块的编程,因为我扩展了 FlatFileItemWriter 类来生成输出文件。
问题是我将有超过 1000 条记录作为输入,并且块值是 100。所以 customFlatFileItemWriter 将被调用 10 次。但问题是每条记录都是相互关联的,我应该检查前一个 id 和下一个记录 id。
批量输入
123, sample1
123, sample2 // Here I have to check 123 is same as 123 which is previous id
124, sample3 // Here I have to check 124 is same as 123 which is previous id
125, sample4 // Here I have to check 125 is same as 124 which is previous id
为此,如果块在 id - 124 处完成,那么我们在操作记录 id '125' 时无法获取记录 id '124'。
在 stepExecution 中,我们可以将对象保持在 Execution 中并进行下一个任务,但是在这种情况下,我们没有得到 stepExecution,所以无论如何都要让对象进行下一个块操作。
我的自定义 FlatFileItemWriter 的代码
public class FileIW<T> extends FlatFileItemWriter<T> {
@Override
public String doWrite(List<? extends T> items) {
StringBuilder lines = new StringBuilder();
for (T item : items) {
User user = (User)item;
System.out.println(user.getId());
lines.append(this.lineAggregator.aggregate(item)).append(this.lineSeparator);
}
return lines.toString();
}
}