подскажите, что за проблема с этим кодом. он запускается внутри большой транзакции от spring batch
public class TablesSynchronizer {
...
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void forceTableUpdate(){
....
try {
if (!service.scheduleExecutionForTable(pid, table)) {
throw new RuntimeException("Could not set next time for table=" + table);
}
} catch(OptimisticLockException e) {
log.warn("OptimisticLockException catched for pid " + pid);
}
log.info("Next time for table set, table=" + table);
}
}
вижу WARN лог от OptimisticLockException и INFO "Next time set", но после них spring batch откатывает верхнюю транзакцию с сообщением
Commit failed while step execution data was already updated. Reverting to old version.
как так выходит, ведь exception в отдельной от spring batch транзакции ?
на stackoverflow нашел похожий случай без ответа
https://stackoverflow.com/questions/34036345/why-does-spring-propagation-required-span-nested-logical-transactions?rq=1