2016-04-13 26 views
0

私は非常に単純なSpring Batchアプリケーションを使用して、複数のファイルを読み込んで1つのファイルに書き込みます。私のプロジェクトは、ファイルが "#"で始まる行を除いて、すべてのシナリオで超うまく動作しています。私の読者はその行を読まない。問題は、上位システムが#:(Spring Batchを使用して#で始まるファイルの内容を読み込みます。

で始まるeverylineファイルをダウン送信しようとしている誰でも同様の問題とどのようにそれを解決するためには直面しないことである。事前に

おかげで..

マイtokenizerconfig

<bean id="accountDataTokenizer" class="org.springframework.batch.item.file.transform.PatternMatchingCompositeLineTokenizer"> 
    <property name="tokenizers"> 
     <map> 
      <entry key="#ACCOUNT*" value-ref="headerRecordTokenizer" /> 
      <entry key="*" value-ref="defaultLineTokenizer" /> 
     </map> 
    </property> 
</bean> 

+0

はあなたの現在の春の一括設定を投稿できるの?そして、あなたはそのような行で何をしたいですか?それらを無視する? – Tunaki

+0

入力ファイルが他のシステムから生成されています。そのシステムは、各行が "#"で始まるようにそのファイルを生成します。今私はそれらのファイルを読んでいるとき私は私の読者の中の任意のコンテンツを取得しないでください、しかし、私は "#"各行からすべて正常に動作して削除します。 –

答えて

1

FlatFileItemReaderは、その文字列を設定する機能を提供しますコメントアウトされた行を識別します。これはFlatFileItemReader#setComments(String[] prefixes)の設定で行います。次のようにだからあなたの場合には、あなたがあなたのFlatFileItemReaderを設定したい:

@Bean 
public FlatFileItemReader reader() { 
    FlatFileItemReader reader = new FlatFileItemReader(); 
    ... 
    reader.setComments(new String[] {"#"}); 
    return reader; 
} 

あなたがFlatFileItemReader、ここでドキュメントのこのメソッドの詳細読むことができます:https://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/file/FlatFileItemReader.html

+0

マイケルミネラさんに感謝します。私はあなたが言うことを得て、それを実装しました。私は設定を使って、読者がすべての私の行をコメントとして認識していたため、あらかじめ定義されたコメントの値を上書きしています。 –

+0

行区切り記号も正しいことを確認してください。 –

+0

#でデータのハンドルを取得できましたが、正しくトークン化できませんでした。私のinputfileは次のようなものです:#Account:12345,234,12私はtokenizerを使うと名前付きの行をトークン化せず、トークン配列形式でデータを与えます。私は問題のtokenizer設定を更新しました。 –

0

1行目には、itemReader(FlatFileItemReader)にこのプロパティを追加することで、ファイルの最初の行を読み取るためにスキップすることができ、常に「#」の場合:

+0

1行目の先頭行だけでなく、各行の最初の文字が「#」 –

+0

通常、Springバッチジョブでは、Reader、Processor、Writerという3つのクラスがあります。 ItemProcessorを実装するクラスには、読み込まれた行のJava Beanを入力として受け取る "process"というメソッドがあります。このメソッドで文字を削除することもできますし、(別の方法で)ファイル構造を拡張するJava Beanを変更することもできます。getXXXメソッド(XXXはフィールドの名前)を変更して値を返す前に特殊文字を削除できます。これらの提案があなたに役立つことを願っています。 – TeoVr81

+0

:ありがとうございます。私はあなたがここに示唆していることを理解していますが、私は読者自身の中に内容を取り入れていません(私はカスタムリーダーを書いています)ので、アイテムのハンドルを持たないのでPOJOにマップすることはできません。だから最初の繰り返しでは、読者はnullが返されますが、私の読者はまだコンテンツを返さなかったので、私のプロセッサにはそのハンドルはありません。 –

関連する問題