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));
}
}
}