ejemplo java spring transactions propagation

java - @transactional spring ejemplo



Diferencias entre require_new y la propagaciĆ³n anidada en las transacciones de Spring (3)

No puedo entender la diferencia de comportamiento entre las políticas de propagación PROPAGATION_REQUIRES_NEW y PROPAGATION_NESTED . Me parece que en ambos casos, el proceso actual se revierte, pero no toda la transacción. ¿Cualquier pista?


PROPAGATION_REQUIRES_NEW: utiliza una transacción completamente independiente para cada ámbito de transacción afectado. En ese caso, las transacciones físicas subyacentes son diferentes y, por lo tanto, pueden comprometerse o retrotraerse de forma independiente, con una transacción externa no afectada por el estado de retrotracción de una transacción interna.

PROPAGATION_NESTED: utiliza una única transacción física con múltiples puntos de rescate a los que puede retroceder. Tales retrocesos parciales permiten que un ámbito de transacción interno desencadene una reversión para su alcance, con la transacción externa que puede continuar la transacción física a pesar de que algunas operaciones se han retrotraído. Esta configuración generalmente se asigna a los puntos de guardado de JDBC, por lo que solo funcionará con las transacciones de recursos de JDBC.

verificar la documentación de primavera


Por favor encuentre la diferencia

1.) Use of NESTED Transaction

Ejecutar dentro de una transacción anidada si existe una transacción actual, se comportan como PROPAGATION_REQUIRED else. La transacción anidada es compatible con Spring

2.) Uso de Transacción REQUERIDA Apoyar una transacción actual, crear una nueva si no existe. . Significa para el dominio bancario como retirar, depositar, actualizar la transacción

3.) Uso de REQUIRES_NEW Transaction Crea una nueva transacción y suspende la transacción actual, si existe.


Ver este enlace: forum.springsource.org/archive/index.php/t-16594.html Juergen Hoeller lo explica muy bien

PROPAGATION_REQUIRES_NEW inicia una nueva transacción "interna" independiente para el alcance dado. Esta transacción se comprometerá o retrotraerá completamente independiente de la transacción externa, teniendo su propio alcance de aislamiento, su propio conjunto de bloqueos, etc. La transacción externa se suspenderá al principio de la interna y se reanudará una vez que la interna tenga terminado. ...

PROPAGATION_NESTED, por otro lado, inicia una transacción "anidada", que es una verdadera subtransacción de la existente. Lo que sucederá es que se tomará un punto de rescate al comienzo de la transacción anidada. Si la transacción anidada falla, retrocederemos a ese punto de rescate. La transacción anidada es parte de la transacción externa, por lo que solo se confirmará al final de la transacción externa. ...