В моем проекте весенней загрузки у меня есть вызываемая задача. В рамках этой вызываемой задачи я выполняю несколько операций записи в базу данных. Теперь, когда какая-либо из операций с базой данных не удается, мне нужно откатить всю транзакцию. Для этого я использовал аннотацию @Transactional
. Но откат транзакции не происходит, когда операция записи в базу данных завершается неудачно.
public class MyCallableTask implements Callable<String> {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Override
@Transactional(rollbackFor = Exception.class)
public String call() throws Exception {
try {
// database op-1
// database op-2
// database op-3 // If failed need to roll back the whole transaction
}catch (Exception ex) {
logger.error("Error occurred",ex);
throw ex;
}
return "COMPLETE";
}
}