У меня есть весеннее пакетное задание, которое считывает данные из веб-службы, выполняет некоторое обогащение в процессоре и затем сохраняет в БД. Если кто-то запускает одно и то же задание дважды для одного и того же набора параметров, я хочу удалить старые данные в БД, а затем перезаписать их как часть этого задания.
Я уже написал лог удаления c в StepExecutionListener Step Step.
Как сделать мой шаг транзакционным, чтобы в случае ошибки в задании операция удаления была откатана?
this.stepBuilderFactory.get("xStep")
.<Item,Item>chunk(1000)
.reader(xReader)
.processor(xProcessor)
.writer(xWriter)
.listener(xStepExecutionListenerForDelete)
.build()