如何从Spring Batch中的ItemReader动态设置MultiResourceItemWriter的资源

批处理作业是:

  • 从csv文件中读取

  • 为csv中的每个记录(行)创建一个xml文件,名称为Patent.ID.xml(其中ID是csv中的字段,Patent是我的模型类),例如:1.xml,2.xml

问题是我找不到一种方法来动态地将文件名设置为csv文件中的每个ID

这是我的配置:

                                                  

创建一个ItemWriteListener ,注入multiResourceItemWriter bean并将侦听器绑定到您的步骤。
ItemWriteListener.beforeWrite()使用您要写入的项目创建一个新的ResourceSuffixCreator对象,以创建资源扩展(后缀)。
MultiResourceItemWriter.resource可能需要更改为file:xml/因为1.xml,2.xml等将使用为您正在编写的每个项目动态创建的自定义ResourceSuffixCreator进行追加。

这个解决方案很脏,并且(可能)由于commit-interval=1而起作用; 如果你改变我的答案(可能)将失败。

我希望我很清楚,英语不是我的母语。

我找不到让Luca的解决方案工作的方法,所以我以这种方式扩展了MultiResourceItemWriter:

 public class MyMultipleItemWriter extends MultiResourceItemWriter { @Override public void write(List items) throws Exception { this.setResourceSuffixCreator(new MySuffixCreator(items.get(0).getField())); super.write(items); } }