Java 如何在spring批处理中使用FlatFileItemWriter写入标准输出?
我在spring批处理项目的beans定义文件中配置了以下编写器:Java 如何在spring批处理中使用FlatFileItemWriter写入标准输出?,java,spring,iostream,java-io,spring-batch,Java,Spring,Iostream,Java Io,Spring Batch,我在spring批处理项目的beans定义文件中配置了以下编写器: <bean id="writer" class="org.springframework.batch.item.file.FlatFileItemWriter"> <property name="resource" value="file:/path/to/somefile"/> <property name="lineAggregator"> <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,原因是我希望通过命令行启动器启动此作业,并通过管道将输出传输到另一个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));
}
}
}
import java.util.List;
导入org.springframework.batch.item.ItemWriter;
导入org.springframework.batch.item.file.transform.LineAggregator;
公共类StdoutWriter实现ItemWriter{
线性集料器线性集料器;
公共无效设置LineAggregator(LineAggregator LineAggregator){
this.lineAggregator=lineAggregator;
}
@凌驾
public void write(List我认为没有任何现成的东西可以满足您的需要。创建自己的ItemWriter
非常简单,它可以实现一个简单的System.out.println()
。然后,如果您仍然需要该文件,可以使用
或者,您可以打开一个自定义文件并在那里进行打印。您可以使用另一种方法写入标准输出。本质上,您可以指定/dev/stdout
作为输出文件资源。请确保在wri中将shouldDeleteIfExists
设置为false
并将appendAllowed
设置为true
ter或您将得到运行时错误。事实上,编写我自己的itemwriter是最简单的解决方案。感谢并抱歉没有预先考虑它:-)在这里您可以找到相同的实现。