Я новичок в пакете Spring и в настоящее время работаю над чтением нескольких файлов с помощью MultiResourceItemReader и записью их в разные таблицы базы данных с помощью CompositeItemWriter, каждый файл содержит разное количество строк. Мой вопрос: можно ли, если не удалось вставить одну строку в базу данных, сделать ROLLBACK всех вставленных строк этого файла? Есть ли способ сделать ROLLBACK?




Пакет Spring читает и записывает данные в виде кусков. Предположим, что у вас есть 1000 записей и размер фрагмента равен 100, и вы выполняете пакетную вставку. Для каждого фрагмента (100 элементов) весенний пакет будет открывать транзакцию, вставлять 100 записей и фиксировать транзакцию. В случае возникновения какой-либо ошибки этот конкретный блок (100 записей) будет откатываться. Но все предыдущие чанки, которые уже вставлены, откатить нельзя.
Нет. Размер патрона может быть любым. Если у вас 104, ваш ItemReader прочитает 100 элементов и отправит 100 элементов вашему ItemWriter. Ваш ItemWriter должен выполнять пакетную вставку/обновление базы данных. В следующем отрезке вашим писателем будут прочитаны и вставлены только 4 элемента. В следующем чанке ItemReader вернет null, так как достигнут конец файла. Следовательно, работа будет прекращена.
Спасибо за четкое объяснение. но если у меня нет фиксированного количества элементов для транзакции. Например, в первом файле 100 элементов, а во втором - 104 элемента, размер фрагмента должен быть 104? или возможно, что размер куска зависит от количества строк в файле?