我需要编写一个使用页脚的Spring批量自定义项目编写器,但我不能使用委托模式 . 是否有另一种方法来编写Spring批量自定义项目编写器?
先感谢您 .
创建一个实现 ItemStream 的自定义 ItemWriter (以管理可重启性和页脚写入)并覆盖下一个方法:
ItemStream
ItemWriter
ItemWrite.write(List<> items) :写入项目并在写入期间为页脚执行必要的数据计算
ItemWrite.write(List<> items)
ItemStream.update(ExecutionContext) :在write()方法中保存计算的页脚数据
ItemStream.update(ExecutionContext)
ItemStream.open(ExecutionContext) :恢复以前保存的页脚数据
ItemStream.open(ExecutionContext)
ItemStream.close() :做真正的页脚写作(直接在你自己的作家或使用回调)
ItemStream.close()
检查here
基本上你需要创建一个实现 ItemWriter<YourModel> 和 FlatFileFooterCallback 的类
ItemWriter<YourModel>
FlatFileFooterCallback
在 write 方法中,输入数据的写入方式以及文件页脚的 writeFooter .然后将您的类声明为bean,并将其作为作者写入您的工作中 .
write
writeFooter
我找到了解决方案 . 我不能写一个自定义的文章编写器,但我创建了一个bean,我已经覆盖了toString方法 . 在这个方法中,我根据需要将输出设置为文件 . 然后,我创建了一个PassThroughLineAggregator类型的文章编写器 . 这个itemwriter调用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>
3 回答
创建一个实现
ItemStream
的自定义ItemWriter
(以管理可重启性和页脚写入)并覆盖下一个方法:ItemWrite.write(List<> items)
:写入项目并在写入期间为页脚执行必要的数据计算ItemStream.update(ExecutionContext)
:在write()方法中保存计算的页脚数据ItemStream.open(ExecutionContext)
:恢复以前保存的页脚数据ItemStream.close()
:做真正的页脚写作(直接在你自己的作家或使用回调)检查here
基本上你需要创建一个实现
ItemWriter<YourModel>
和FlatFileFooterCallback
的类在
write
方法中,输入数据的写入方式以及文件页脚的writeFooter
.然后将您的类声明为bean,并将其作为作者写入您的工作中 .
我找到了解决方案 . 我不能写一个自定义的文章编写器,但我创建了一个bean,我已经覆盖了toString方法 . 在这个方法中,我根据需要将输出设置为文件 . 然后,我创建了一个PassThroughLineAggregator类型的文章编写器 . 这个itemwriter调用bean输出的toString方法 . 就这样!!
这是代码:MOH_Diaria_Bean_Out.java:
ItemWriter: