Весенние пакетные транзакции в StepExecutionListener - PullRequest
0 голосов
/ 04 мая 2020

У меня есть весеннее пакетное задание, которое считывает данные из веб-службы, выполняет некоторое обогащение в процессоре и затем сохраняет в БД. Если кто-то запускает одно и то же задание дважды для одного и того же набора параметров, я хочу удалить старые данные в БД, а затем перезаписать их как часть этого задания.

Я уже написал лог удаления c в StepExecutionListener Step Step.

Как сделать мой шаг транзакционным, чтобы в случае ошибки в задании операция удаления была откатана?

this.stepBuilderFactory.get("xStep")
.<Item,Item>chunk(1000)
.reader(xReader)
.processor(xProcessor)
.writer(xWriter)
.listener(xStepExecutionListenerForDelete)
.build()

1 Ответ

0 голосов
/ 04 мая 2020

Как я могу сделать свой шаг транзакционным, чтобы при возникновении ошибки в задании операция удаления была отменена?

Вы можете записать лог удаления c как часть средство записи элементов, которое вызывается внутри транзакции, управляемой Spring Batch. Если по какой-либо причине транзакция будет отменена, операция удаления будет отменена. Обратите внимание, что средство записи элементов используется не только для вставки данных, но также может использоваться для обновления данных и их удаления (например, MongoItemWriter # setDelete ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...