Весенняя партия: RollBack для CompositeItemWriter

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
349
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пакет Spring читает и записывает данные в виде кусков. Предположим, что у вас есть 1000 записей и размер фрагмента равен 100, и вы выполняете пакетную вставку. Для каждого фрагмента (100 элементов) весенний пакет будет открывать транзакцию, вставлять 100 записей и фиксировать транзакцию. В случае возникновения какой-либо ошибки этот конкретный блок (100 записей) будет откатываться. Но все предыдущие чанки, которые уже вставлены, откатить нельзя.

Спасибо за четкое объяснение. но если у меня нет фиксированного количества элементов для транзакции. Например, в первом файле 100 элементов, а во втором - 104 элемента, размер фрагмента должен быть 104? или возможно, что размер куска зависит от количества строк в файле?

noor 08.04.2019 23:30

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

Tech Guy 09.04.2019 16:13

Другие вопросы по теме