我在 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>
现在,我希望输出到 stdout,而不是写入 /path/to/somefile,原因是我想通过命令行启动器启动此作业并将输出通过管道传输到另一个 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));
}
}
}