Perspectiva de los estudiantes sobre escenarios comunes de fallas en las transacciones de Spring
Ocho escenarios de falla comunes en JavaSpring
1 El método de transacción no es administrado por Spring
Si la clase donde se encuentra el método de transacción no está registrada en el contenedor Spring IOC, también lo hará Es decir, si la clase donde se encuentra el método de transacción no es administrada por Spring, la transacción Spring no será válida
2 Los métodos se modifican con tipos finales <. /p>
A veces, un método no quiere ser rehecho por una subclase. En este momento, el método se puede definir como final. No hay problema en definir métodos ordinarios como este, pero si el método de transacción se define como final, por ejemplo:
Método modificado no público
Si el método de transacción es. no se modifica públicamente, entonces las transacciones Spring fallarán, por ejemplo
4. Los métodos en la misma clase se llaman entre sí
5. El tipo de propagación de transacciones del método no admite transacciones. /p>
Si el tipo de propagación de transacción del método interno es un tipo de propagación que no admite transacciones, la transacción del método interno tampoco será válida en Spring. Por ejemplo
6. Las transacciones abiertas no están configuradas
Si no hay un administrador de transacciones Spring configurado en el proyecto, incluso si se utiliza la función de administración de transacciones de Spring, las transacciones de Spring no tendrán efecto, por ejemplo, si es un proyecto Spring Boot. y no configure el siguiente código en el proyecto Spring Boot
7. Características de propagación de errores
De hecho, cuando usamos la anotación @Transactional, podemos especificar el parámetro de propagación. La función de este parámetro es especificar las características de propagación de la transacción. Actualmente, Spring admite 4 características de propagación:
REQUIRED Si existe una transacción en el contexto actual, únase a la transacción si no hay ninguna transacción. , cree una transacción. Este es el valor del atributo de propagación predeterminado.
SOPORTES Si hay una transacción en el contexto actual, admite agregar la transacción a la transacción. Si no hay transacción, se ejecutará de manera no transaccional.
OBLIGATORIO si existe una transacción en el contexto actual; de lo contrario, se lanza una excepción.
REQUIRES_NEW creará una nueva transacción cada vez y suspenderá la transacción en el contexto al mismo tiempo. Una vez completada la ejecución de la nueva transacción actual, la transacción de contexto se reanudará y ejecutará nuevamente.
8. Llamadas multiproceso
En el desarrollo de proyectos reales, todavía existen muchos escenarios de uso para subprocesos múltiples. Si las transacciones Spring se utilizan incorrectamente en escenarios de subprocesos múltiples, las transacciones no tendrán efecto.