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?
java
spring
transactions
propagation
Alexis Dufrenoy
fuente
fuente
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.
fuente
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
fuente
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.
fuente