【问题标题】:How can I write to stdout using FlatFileItemWriter in spring batch?如何在春季批处理中使用 FlatFileItemWriter 写入标准输出?
【发布时间】:2011-09-07 17:46:28
【问题描述】:

我在 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:无法创建文件:[/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));
    }
}

}

【问题讨论】:

标签: java spring iostream java-io spring-batch


【解决方案1】:

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

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

【讨论】:

  • 确实,编写我自己的 itemwriter 是最简单的解决方案。感谢并抱歉没有提前考虑:-)
【解决方案2】:

您可以使用另一种技巧来写入标准输出。本质上,您可以指定/dev/stdout 作为输出文件资源。请务必在编写器中将shouldDeleteIfExists 设置为falseappendAllowed 设置为true,否则会出现运行时错误。

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 2015-06-11
    • 2014-12-15
    • 2018-05-27
    • 2015-05-13
    • 2017-06-25
    • 1970-01-01
    • 2018-02-08
    相关资源
    最近更新 更多