2016-08-02 4 views
1

私は春のバッチを学習しています。リーダー、マッパー、ライターの基本的な考え方があります。今私の現在の要件は、ファイルから各行を読み込み、データを圧縮し、gigaspaceベースのインメモリグリッドに書き込むことです。スプリングバッチを使用してマッパーなしで完全な行を読み取る方法

私はラインマッパーがiteamリーダーのための必須属性であると理解します。私はマッパを作っていないので、行を読んでライターに送ってグリッドに書き込むだけです。だから、どのように私はラインマッパーをスキップするか、またはプレーンラインを読むことができます。現在、私はこのような何かをしています、それはイニシアチブの解決策ではないようです。

public class ShrFileMapper implements FieldSetMapper<SpaceDocument> { 
    @Override 
    public SpaceDocument mapFieldSet(FieldSet fieldSet) throws BindException { 
     String positionId = fieldSet.readString(0); 
     StringBuffer line = new StringBuffer(); 
     for (String fieldValue : fieldSet.getValues()) { 
      line.append("\t").append(fieldSet); 
     } 

     // logic for compression 

     SpaceDocument spaceDocument = new SpaceDocument("shr.doc"); 
     spaceDocument.setProperty("id", positionId); 
     spaceDocument.setProperty("payload", compressedString); 

     return spaceDocument; 
    } 
} 

答えて

4

FlatFileItemReaderを使用していると仮定すると、リソースとLineMapperを用意する必要があります。 LineTokenizerを必要としない入力行に変換したくないので、生の入力をパススルーしたいだけです。詳細については、公式ドキュメントをチェックアウトすることができます

http://docs.spring.io/spring-batch/reference/html/readersAndWriters.html#flatFileItemReader

春はすでにこのような機能を提供してきました。 PassThroughLineMapper https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/mapping/PassThroughLineMapper.java

public class PassThroughLineMapper implements LineMapper<String>{ 

    @Override 
    public String mapLine(String line, int lineNumber) throws Exception { 
     return line; 
    } 

} 

このクラスは正確にあなたが必要なん何をチェックアウトしてください!

関連する問題