如何从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 extends MyBeanXml> items) throws Exception { this.setResourceSuffixCreator(new MySuffixCreator(items.get(0).getField())); super.write(items); } }