хотел бы понять, когда именно происходит фиксация и когда именно происходит откат в случае вложенной транзакции с разными уровнями изоляции для вызова и вызываемых методов,
Например, у меня есть две службы Spring, и я звоню method2 of service2 из method1 of service1.
Method1 имеет ТРЕБУЕМУЮ область транзакции, а Method2 имеет область транзакции REQUIRES_NEW, как показано в программе ниже.
@Transactional(propagation = Propagation.REQUIRED)
method1()
{
for(int i=0; i<10; i++){
service2.method2();
}
// Some more code which takes some time to process
}
}
Service2 {
@Transactional(propagation = Propagation.REQUIRES_NEW)
method2()
{
//Save some information to DB
// Save an object using JPA
}
}
Теперь мой вопрос: As i понять, что REQUIRES_NEW запустит новую транзакцию, но будет ли она немедленно фиксироваться на существующем методе2 или пружина будет ждать, пока метод1 не будет завершен, а затем зафиксируется?
Меня интересует, в какой момент времени происходит фиксация и блокировка строки в БД освобождается, что сохраняется в методе 2.
Примечание. Здесь я разместил оба метода в разных службах, чтобы Spring могла выполнять вложенную транзакцию.
со мной происходит то, что откаты работают, как ожидалось, и когда дело доходит до фиксации, хотя это независимая фиксация, похоже, что фиксация происходит только после завершения метода 1.