Spring BatchのSample(固定長フォーマットファイル読み書き)(六)

7911 ワード

回転:http://www.cnblogs.com/gulvzhe/archive/2011/12/17/2291076.html
前編のSpring Batchについて、Spring BatchのXMLファイルの読み書き操作について述べました. 本文は完全な例を通して、Spring Batchを使って固定された長いフォーマットのファイルを読み書きすることについて議論します.例は、前の例に続き、4つのフィールドを含むTXTファイル(ID、Name、Age、Score)を読み、読み出したフィールドを簡単に処理し、他のTXTファイルに出力する.
      工事の構造は下の図のようです.
      appication Contect.xmlとlogl 4 j.xmlの前の文はすでに述べましたが、ここでは贅を要しません.
      本論文の核心配置ファイルbatch.xmlの内容は以下の通りである.



    

    
    
        
            
                
                
            
        
    

    
    
        
        
            
                
                
                    
                        
                    
                
            
        
    
    
    
        
        
    

    
    
        
        
            
                
                    
                        
                    
                
                
            
        
    
       22-30行にはJobの基本情報が配置されています.このJobはStepを含み、Stepには基本的な読み(fixedlengthReader)、処理(fixed LengthProcessor)、書き込み(fixed LengthWriter)、およびcomit件数(commt-interval)が含まれています.
      33-49行には、読み出し処理の詳細が設定されています.固定長フォーマットとcsvフォーマットはいずれもflatファイル形式ですので、固定長フォーマットファイルを読み込むにもSpring Batchを使用して提供されるコアクラスFlatFileItemReaderが必要です.このような配置は「Spring BatchのSample(CSVファイル操作)」(四)にあります. 》で詳細に説明しましたが、オンラインTokenizerの構成に注意してください.CSVファイルを読み込む際にはDelimitedLine Tokenizer類を使います.しかし、固定された長いフォーマットのファイルを読み込むには、52-56行のようにFixedLengthTokenizerを使用します.そのcolumnsはどのように記録情報を分割しますか?つまり、どの項目の情報を指定します.(注意:列数の合計長さがファイル記録長と異なる場合、エラーが発生します.範囲に注意してください.)属性namesは各項目の名前を指定します.名前は44行のprototypeBenName属性で指定されたPojo属性名と同じです.
      59-76行には、書き込み処理の詳細が設定されています.固定長フォーマットのファイルは、CSV形式のファイルを書くのと同様に、Spring Batchで提供されるコアクラスFlat FileItemWriterを使用しています.ここでは説明しなくてもいいです.ただし、ラインAggator属性はFormaterLine Agregator類を使用しています.このようなフォーマットは、各項目の長さと書式を指定できます.
      batch.xmlファイルには固定長ファイルと書き込みが配置されています.読んだ後、書く前の処理は、所定のFixedlength Processorを通じて行います. クラスで処理します.詳細コードは以下の通りです.
package com.wanggc.springbatch.sample.fixedlength;

import org.springframework.batch.item.ItemProcessor;
import org.springframework.stereotype.Component;

/**
 *      。
 * 
 * @author Wanggc
 */
@Component("fixedLengthProcessor")
public class FixedLengthProcessor implements
        ItemProcessor {

    /**
     *              。
     * 
     * @param student
     *                  。
     * @return       。
     * @exception Exception
     *                          。
     */
    public StudentPojo process(StudentPojo student) throws Exception {
        /*   ID    */
        student.setName(student.getID() + "--" + student.getName());
        /*    2 */
        student.setAge(student.getAge() + 2);
        /*    10 */
        student.setScore(student.getScore() + 10);
        /*           writer */
        return student;
    }

}
      ここでは、固定長フォーマットファイルの読み込み、処理、書き込みについて説明しました.以下はサブファイルの情報です.
      PojoクラスStudentPojoの詳細コードは以下の通りです.
package com.wanggc.springbatch.sample.fixedlength;

/** Pojo _Student */
public class StudentPojo {
    /** ID */
    private String ID = "";
    /**    */
    private String name = "";
    /**    */
    private int age = 0;
    /**    */
    private float score = 0;
    /*      ,getter   setter      */    
}
      JobスタートクラスLaunchの詳細コードは以下の通りです.
package com.wanggc.springbatch.sample.fixedlength;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Launch {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "batch.xml");
        JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
        Job job = (Job) context.getBean("fixedLengthJob");

        try {
            // JOB  
            JobExecution result = launcher.run(
                    job,
                    new JobParametersBuilder()
                            .addString("inputFilePath",
                                    "C:\\testData\\fixedLengthInputFile.txt")
                            .addString("outputFilePath",
                                    "C:\\testData\\fixedLengthOutputFile.txt")
                            .toJobParameters());
            //       
            System.out.println(result.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
      inputファイルの内容は以下の通りです.
     処理結果は以下の通りです
     次回は、Spring Batchの複合フォーマットファイルの読み書きについて、みんなで議論します.