2010-05-02 19 views
9

Tengo una pregunta sobre la propagación de la transacción de primavera. Si uso @Transactional (propagación = Propagación.REQUIRED) para anotar un método m1. Cuando la lógica de ejecución ingrese m1, si ya hay una transacción, m1 la usará. Cuando después de m1, ¿qué pasa con la transacción? ¿Termina o sigue abierto? (Si llamo a m1 en otro método, y después de la invocación, todavía hay otras cosas que hacer).Pregunta sobre la propagación de la transacción de primavera

En resumen, quiero saber al salir de un método anotado, la transacción finaliza o aún se abre?

Gracias.

Respuesta

17

Propagation.REQUIRED (documentado here) creará una nueva transacción (si no existe para el hilo actual), o se unirá a una transacción existente (si existe).

Cuando el método finaliza, la transacción se completará (si al ingresar el método provocó la creación de una transacción), o dejará la transacción abierta (si ya existió una transacción cuando se ingresó el método). En otras palabras, es simétrico y dejará el estado transaccional del subproceso en el mismo estado que tenía antes de ingresar el método.

+0

Hola, ¿qué hay de otro nivel de propagación con respecto a mi pregunta? –

+0

@Yousui: Los diversos niveles de propagación y sus efectos están documentados en el enlace que publiqué. – skaffman

+0

Gracias, personal, después de leer su respuesta cuidadosamente y hacer algunas pruebas, he entendido la política de propagación de la transacción de primavera. Muchas gracias por tu ayuda. –

Cuestiones relacionadas