Как я могу написать в стандартный вывод, используя FlatFileItemWriter в весеннем пакете? - PullRequest
3 голосов
/ 07 сентября 2011

В моем файле определений 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));
    }
}

}

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Я не думаю, что из коробки есть что-то, что делает то, что вы ищете.Достаточно просто создать свой собственный ItemWriter, который делает простой System.out.println().Затем вы можете использовать CompositeItemWriter, чтобы связать их вместе, если вам все еще нужен файл.

В качестве альтернативы, вы можете добавить пользовательский ItemWriterListener исделайте там печать.

0 голосов
/ 05 августа 2014

Есть еще один хак, который вы можете использовать для записи на стандартный вывод. По сути, вы можете указать /dev/stdout в качестве ресурса выходного файла. Обязательно установите shouldDeleteIfExists на false и appendAllowed на true в модуле записи, иначе вы получите ошибки времени выполнения.

...