首页 文章

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

提问于
浏览
1

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

先感谢您 .

3 回答

  • 0

    创建一个实现 ItemStream 的自定义 ItemWriter (以管理可重启性和页脚写入)并覆盖下一个方法:

    • ItemWrite.write(List<> items) :写入项目并在写入期间为页脚执行必要的数据计算

    • ItemStream.update(ExecutionContext) :在write()方法中保存计算的页脚数据

    • ItemStream.open(ExecutionContext) :恢复以前保存的页脚数据

    • ItemStream.close() :做真正的页脚写作(直接在你自己的作家或使用回调)

  • -1

    检查here

    基本上你需要创建一个实现 ItemWriter<YourModel>FlatFileFooterCallback 的类

    write 方法中,输入数据的写入方式以及文件页脚的 writeFooter .
    然后将您的类声明为bean,并将其作为作者写入您的工作中 .

  • 5

    我找到了解决方案 . 我不能写一个自定义的文章编写器,但我创建了一个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>
    

相关问题