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?
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?
Respuestas:
¿Ver este enlace: PROPAGATION_NESTED versus PROPAGATION_REQUIRES_NEW? Juergen Hoeller lo explica muy bien. - Spring Source Forum está completamente fuera de línea desde el 28 de febrero de 2019, pero puede leer la parte relevante del artículo en la cita a continuación.
PROPAGATION_REQUIRES_NEW inicia una nueva transacción "interna" independiente para el alcance dado. Esta transacción se confirmará o revertirá de forma completamente independiente de la transacción externa, con su propio alcance de aislamiento, su propio conjunto de bloqueos, etc. La transacción externa se suspenderá al comienzo de la interna y se reanudará una vez que la interna haya 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 guardado al comienzo de la transacción anidada. Si la transacción anidada falla, volveremos a ese punto de guardado. La transacción anidada es parte de la transacción externa, por lo que solo se confirmará al final de la transacción externa. ...
PROPAGATION_REQUIRES_NEW: utiliza una transacción completamente independiente para cada alcance de transacción afectado. En ese caso, las transacciones físicas subyacentes son diferentes y, por lo tanto, pueden confirmarse o revertirse de forma independiente, y una transacción externa no se ve afectada por el estado de reversión de una transacción interna.
PROPAGATION_NESTED: utiliza una sola transacción física con múltiples puntos de guardado a los que puede retroceder. Tales reversiones parciales permiten que el alcance de una transacción interna active una reversión para su alcance, y la transacción externa puede continuar la transacción física a pesar de que algunas operaciones se hayan revertido. Esta configuración generalmente se asigna a los puntos de guardado de JDBC, por lo que solo funcionará con transacciones de recursos de JDBC.
comprobar la documentación de primavera
PROPAGATION_REQUIRES_NEW
: La transacción externa se suspenderá al comienzo de la interna y se reanudará una vez que se complete la interna. Cada transacción interna confirmada / revertida cuando se completa. PROPAGATION_NESTED
: La transacción anidada es parte de la transacción externa, por lo que solo se confirmará al final de la transacción externa.
Encuentra la diferencia
1.) Use of NESTED Transaction
Ejecutar dentro de una transacción anidada si existe una transacción actual, comportarse como PROPAGATION_REQUIRED else. La transacción anidada es compatible con Spring
2.) Uso de Transacción REQUERIDA Apoye una transacción actual, cree una nueva si no existe ninguna. . Significa para dominios bancarios como retirar, depositar, actualizar la transacción
3.) Uso de la transacción REQUIRES_NEW Cree una nueva transacción y suspenda la transacción actual si existe.