Наш процессор возвращает список (эффективно передающий List<List<?>>
) на наш ItemWriter
. Теперь мы заметили, что JdbcBatchItemWriter
не запрограммирован для обработки элемента instanceof List. Мы также заметили, что обрабатываем элемент экземпляра List
; нам нужно написать обычай ItemSqlParameterSourceProvider
. Но печальная часть заключается в том, что он возвращает SqlParameterSource
, который может обрабатывать только один объект и снова не способен обрабатывать список. Итак, кто-то может помочь нам понять, как обрабатывать список списков в JdbcBatchItemWriter
.Использование ItemWriter со списком списков
1
A
ответ
6
Как правило, дизайн картина:
Reader -> reads something, returns ReadItem
Processor -> ingests ReadItem, returns ProcessedItem
Writer -> ingests List<ProcessedItem>
Если ваш процессор возвращается List<Object>
, то вам нужен писатель ожидать List<List<Object>>
.
Вы могли бы сделать это, обернув вашего JdbcBatchItemWriter
в качестве делегата в качестве ItemWriter, который выглядит примерно так:
public class ListUnpackingItemWriter<T> implements ItemWriter<List<T>>, ItemStream, InitializingBean {
private ItemWriter<T> delegate;
@Override
public void write(final List<? extends List<T>> lists) throws Exception {
final List<T> consolidatedList = new ArrayList<>();
for (final List<T> list : lists) {
consolidatedList.addAll(list);
}
delegate.write(consolidatedList);
}
@Override
public void afterPropertiesSet() {
Assert.notNull(delegate, "You must set a delegate!");
}
@Override
public void open(ExecutionContext executionContext) {
if (delegate instanceof ItemStream) {
((ItemStream) delegate).open(executionContext);
}
}
@Override
public void update(ExecutionContext executionContext) {
if (delegate instanceof ItemStream) {
((ItemStream) delegate).update(executionContext);
}
}
@Override
public void close() {
if (delegate instanceof ItemStream) {
((ItemStream) delegate).close();
}
}
public void setDelegate(ItemWriter<T> delegate) {
this.delegate = delegate;
}
}
Смежные вопросы
- 1. Использование счетчика со списком списков
- 2. Сравнить список списков со списком
- 3. Объединение список со списком списков
- 4. Проблемы со списком внутри списков
- 5. Работа со списком списков кортежей
- 6. Схема, рекурсия со списком списков
- 7. Почему весной партия itemWriter имеет метод записи со списком данных
- 8. Работа со словарем со списком списков
- 9. Использование LIKE со списком
- 10. Использование PropertyPlaceholderConfigurer со списком
- 11. Как слить список со списком списков
- 12. Apache CXF WebClient работа со списком списков
- 13. Реализация метода цепочки со списком связанных списков
- 14. Частично, сопоставляя список со списком списков
- 15. Как использовать сократить со списком списков
- 16. Пролог-Умножив список со списком списков
- 17. объединить значения списка списков со списком словарей
- 18. Реализация алгоритма Floyd-Warshall со списком списков
- 19. Соедините 2 списка списков со списком кортежей
- 20. вставить запрос для списков со списком
- 21. Удаление элементов из нескольких списков со списком
- 22. Работа со списком списков в Прологе
- 23. Работа со списком списков в Java
- 24. autopopulating текстовые поля из списков со списком
- 25. объединение списка со списком списков в словарь
- 26. WPF. Помогите связать элементы списков со списком
- 27. Создание словаря со списком списков в Python
- 28. Выберите значения из двух списков со списком списков combobox?
- 29. Создание и работа со списком списков списков: в Python
- 30. Использование SelectManyCheckbox со списком объектов
Отлично предложенного решения. Мы планировали сделать что-то более сложное, выполнив http://forum.spring.io/forum/spring-projects/batch/122284-how-to-write-a-list-of-items-with-a-itemwriter; но ваше решение достаточно общее. В последнем случае нам потребовалась бы большая работа. Тестирование было также громоздким. – chatanyday
Очень хорошее форматирование кода, у вас есть шаблон для этого? – Serge
Возможно, более эффективно создать список и выполнить запись один раз. – Serge