Я сделал что-то подобное в своем проекте. Откат транзакции вручную, для этого я вставил блок try-catch и вручную откат транзакции в блоке catch. Теперь я вызываю метод2 из метода1, и я сохраняю объект в базе данных в method2(), но он не сохраняет объект в базе данных.Весна Не совершать транзакции
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor=Throwable.class)
@Scheduled(cron = "0 5 16 * * ?")
public void method1() {
try{
---try block---
}
catch(Throwable t){
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
method2();
}
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public void method2() {
---saving object to database----
someService.update(object);
}
Я просто хочу знать, что может быть возможным решением для сохранения объекта в method2() на method1() 's faliure.
Thanx заранее.
Вы выполняете метод 2 в требуемой транзакции, это потребует новой транзакции. В случае необходимости EJB создаст транзакцию, если ее еще нет, в случае, если у вас есть один, EJB будет использовать текущую транзакцию. –
method2 использует транзакцию из метода1, поэтому оба метода находятся в одной транзакции. Когда метод1 откатывает транзакцию, он откатывает обновление, выполняемое в методе 2 – forgivenson
@forgivenson - как я могу обновить объект в методе2()? –