![](/img/trans.png)
[英]Spring batch FlatFileItemWriter write as csv from Object
[英]How can I write to stdout using FlatFileItemWriter in spring batch?
我在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:无法创建文件:[/ 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));
}
}
}
我不认为开箱即用可以满足您的需求。 创建一个简单的System.out.println()
创建自己的ItemWriter
非常简单。 然后,如果您仍然需要该文件,则可以使用CompositeItemWriter
将两者绑定在一起。
或者,您可以抛出自定义ItemWriterListener
并在那里进行打印。
你可以使用另一个hack写入stdout。 实际上,您可以将/dev/stdout
指定为输出文件资源。 一定要设置shouldDeleteIfExists
以false
和appendAllowed
到true
作家之内,否则你会得到运行时错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.