如何在 Spring Batch 中使用 FlatFileItemWriter 写入标准输出?

Phi*_*ppe 5 java spring iostream spring-batch java-io

我在 Spring Batch 项目的 beans 定义文件中配置了以下编写器:

<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>
Run Code Online (Sandbox Code Playgroud)

现在,我不想写入 /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));
    }
}

}
Run Code Online (Sandbox Code Playgroud)

Jay*_*ist 4

我认为没有任何现成的东西可以满足您的需求。创建您自己的ItemWriter、执行简单的System.out.println(). 如果您仍然需要该文件,则可以使用 将CompositeItemWriter两者捆绑在一起。

或者,您可以进行自定义ItemWriterListener并在那里进行打印。