我需要编写一个使用页脚的Spring批量自定义项目编写器,但我不能使用委托模式。 是否有另一种方法来编写Spring批量自定义项目编写器?
提前谢谢。
答案 0 :(得分:5)
创建一个实现ItemWriter
的自定义ItemStream
(以管理可重启性和页脚编写)并覆盖下一个方法:
ItemWrite.write(List<> items)
:写入项目并在写作期间为页脚执行必要的数据计算ItemStream.update(ExecutionContext)
:在write()方法ItemStream.open(ExecutionContext)
:恢复以前保存的页脚数据ItemStream.close()
:做真正的页脚写作(直接在你自己的作家中或使用回调)答案 1 :(得分:0)
检查here
基本上,您需要创建一个实现ItemWriter<YourModel>
和FlatFileFooterCallback
在write
方法中,输入数据的写入方式以及writeFooter
文件页脚的内容。
然后将您的类声明为bean并将其作为作者写入。
答案 2 :(得分:-1)
我找到了解决方案。我不能写一个自定义的文章编写器,但我创建了一个bean,我已经覆盖了toString方法。在这个方法中,我根据需要将输出设置为文件。然后,我创建了一个PassThroughLineAggregator类型的文章编写器。这个项目编写器调用bean输出的toString方法。这就是全部!!
这是代码: MOH_Diaria_Bean_Out.java:
package es.lac.absis.batch.app.percai.domain;
import java.util.ArrayList;
import java.util.List;
public class MOH_Diaria_Bean_Out {
List<MOH_Diaria_Bean> listaBeans = new ArrayList<MOH_Diaria_Bean>();
public List<MOH_Diaria_Bean> getListaBeans() {
return listaBeans;
}
public void setListaBeans(List<MOH_Diaria_Bean> listaBeans) {
this.listaBeans = listaBeans;
}
public void add (MOH_Diaria_Bean bean){
listaBeans.add(bean);
}
@Override
public String toString() {
// TODO Auto-generated method stub
String salida="";
for (int j=0; j<listaBeans.size(); j++) {
MOH_Diaria_Bean bean = listaBeans.get(j);
salida = salida + bean.toString();
if (j<(listaBeans.size()-1)) {
salida = salida + "\n";
}
}
return salida;
}
}
ItemWriter:
<bean id="MOH_FusionadoFicheros_Writer" class="es.lac.absis.batch.arch.internal.writer.AbsisFlatFileItemWriter">
<property name="resource">
<bean class="es.lac.absis.batch.arch.internal.util.AbsisFileSystemResource">
<constructor-arg ref="filePCA00020"></constructor-arg>
</bean>
</property>
<property name="encoding" value="ISO8859_1"></property>
<property name="lineAggregator">
<bean class="org.springframework.batch.item.file.transform.PassThroughLineAggregator">
</bean>
</property>
</bean>