3

Spring バッチ プロジェクトの Bean 定義ファイルで次のライターを構成しています。

<bean id="writer" class="org.springframework.batch.item.file.FlatFileItemWriter">
    <property name="resource" value="file:/path/to/somefile"/>
    <property name="lineAggregator">
        <bean class="MyCustomLineAggregator"/>
    </property>
</bean>

ここで、/path/to/somefile に書き込む代わりに、出力を stdout に送りたいと思います。その理由は、このジョブをコマンドライン ランチャーから起動し、出力を別の UNIX プログラムにパイプするためです。

リソース プロパティを「file:/dev/stdout」に設定してみましたが、例外が発生しました: org.springframework.batch.item.ItemStreamException: Unable to create file: [/dev/stdout]

これを処理できるすぐに使えるリソースがあるかどうかを確認しようとしましたが、どれが仕事をすることができるかについては少しわかりません...

ご協力いただきありがとうございます。

編集:以下は、あなたのアドバイスに従って、私が思いついた解決策です:

import java.util.List;
import org.springframework.batch.item.ItemWriter;
import org.springframework.batch.item.file.transform.LineAggregator;

public class StdoutWriter<T> implements ItemWriter<T> {

LineAggregator<T> lineAggregator;

public void setLineAggregator(LineAggregator<T> lineAggregator) {
    this.lineAggregator = lineAggregator;
}

@Override
public void write(List<? extends T> items) throws Exception {
    for (T item : items) {
        System.out.println(lineAggregator.aggregate(item));
    }
}

}
4

2 に答える 2

3

あなたが探していることをすぐに実行できるものはないと思います。シンプルな機能を独自に作成するのItemWriterは簡単System.out.println()です。それでもファイルが必要な場合は、 を使用しCompositeItemWriterて 2 つを結び付けることができます。

または、カスタムItemWriterListenerを使用して、そこで印刷を行うこともできます。

于 2011-09-08T01:27:30.430 に答える
0

標準出力への書き込みに使用できる別のハックがあります。/dev/stdout基本的に、出力ファイル リソースとして指定できます。ライター内でshouldDeleteIfExiststofalseappendAllowedtoを必ず設定してください。そうしないと、実行時エラーが発生します。true

于 2014-08-04T21:38:24.617 に答える