编写一个Spring批量自定义项编写器

时间:2014-02-05 15:43:41

标签: spring-batch

我需要编写一个使用页脚的Spring批量自定义项目编写器,但我不能使用委托模式。 是否有另一种方法来编写Spring批量自定义项目编写器?

提前谢谢。

3 个答案:

答案 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>