Несколько блоквинеров в Spring партиях

В настоящее время я пишу пакет Spring, где я читаю фрагмент данных, обрабатывая его, а затем я хочу передать эти данные двум авторам. Один писатель просто обновил базу данных, тогда как второй писатель напишет в файл csv.

Я планирую написать собственный пользовательский сценарий и вставить два элемента itemWriters в customItemWriter и вызвать методы записи обоих авторов элементов в методе writeItemWriter. Правильно ли этот подход? Существуют ли какие-либо доступные версии ItemWriter, соответствующие моим требованиям?

Заранее спасибо

Ответ 1

Вы можете использовать Spring CompositeItemWriter и делегировать его всем вашим писателям.
вот пример конфигурации .

Ответ 2

Вам необязательно использовать xml, как в примере. Если в остальной части вашего кода используется аннотация, вы можете просто сделать следующее.

public ItemWriter<T> writerOne(){
    ItemWriter<T> writer = new ItemWriter<T>();
    //your logic here
    return writer;
}

public ItemWriter<T> writerTwo(){
    ItemWriter<T> writer = new ItemWriter<T>();
    //your logic here
    return writer;
}

public CompositeItemWriter<T> compositeItemWriter(){
    CompositeItemWriter writer = new CompositeItemWriter();
    writer.setDelegates(Arrays.asList(writerOne(),writerTwo()));
    return writer;
}

Ответ 3

Ты был прав. SB основывается на делегировании, поэтому использование CompositeItemWriter является правильным выбором для ваших нужд.

Ответ 4

В зависимости от вашей потребности другой вариант заключается в расширении класса Writer и добавлении туда функций. Например, у меня есть проект, в котором я расширяю HibernateItemWriter, а затем переопределяет запись (элементы списка). Затем я отправляю объекты, которые пишу вместе с моим sessionFactory, в метод doWrite для Writer: doWrite (sessionFactory, filtersRecords).

Итак, в приведенном выше примере я мог написать файл csv в моем расширенном классе, а затем HibernateItemWriter напишет в базу данных. Очевидно, это может быть не идеальным для этого примера, но для определенных сценариев это хороший вариант.