Red de conocimiento informático - Problemas con los teléfonos móviles - 7 situaciones en las que fallan las transacciones de Spring

7 situaciones en las que fallan las transacciones de Spring

@Transactional(rollbackFor = {lista de tipos de excepción})

La anotación @EnableTransactionManagement se utiliza para permitir la gestión automática de transacciones por parte de Spring, así que no olvide escribir esto anotación.

@Transaction se puede utilizar en clases, interfaces y métodos públicos. Si @Trasaction se utiliza en un método no público, la transacción no será válida.

Spring administra las transacciones a través de administradores de transacciones. No olvide configurar el administrador de transacciones. Tenga en cuenta que cada fuente de datos debe configurar un administrador de transacciones:

Spring administra las transacciones a través de aop. De esta manera, se genera un objeto proxy en el bean que requiere Spring para administrar las transacciones, y luego la ejecución del método de destino se intercepta a través del objeto proxy.

Mire el siguiente código y piense en una pregunta: cuando se llama directamente a m1 externamente, ¿surge la transacción del método m2?

Obviamente no tendrá efecto, porque m1 está llamando al método m2 a través de esto, y este no es un objeto proxy. This.m2() no interceptará la transacción, por lo que la transacción no es válida. se llama directamente desde el exterior a través de UserService. Este bean llama al método m2, la transacción tendrá efecto y el código anterior se puede ajustar. Como se muestra a continuación, @1 se inyecta en UserService y en este momento la transacción m2 en m1 entra en vigencia.

Punto clave: se debe acceder a este método a través del objeto proxy para que la transacción surta efecto.

Mecanismo de reversión de transacciones de Spring: la captura de prueba del método comercial. Cuando se detecta la excepción especificada, Spring revertirá automáticamente la transacción. Entonces, la pregunta es, ¿qué transacciones anormales revertirá Spring?

Spring revertirá la transacción independientemente de cualquier excepción. De forma predeterminada, Spring revertirá la transacción cuando se encuentre RuntimeException y Error.

También puede personalizar el tipo de excepción que se revertirá:

Cuando un método comercial genera una excepción, Spring detectará la excepción y realizará la reversión de la transacción si la excepción se traga. el método, entonces la transacción no puede detectar la excepción y no revertirá la transacción.

En el siguiente código, se produjo una excepción en la operación de transacción 2, pero se detectó. En este momento, la transacción no se revertirá.

Código comercial y transacción de primavera. El código debe ejecutarse en un hilo.

La implementación de transacciones de primavera usa ThreadLocal. Todos deben conocer ThreadLocal. Los siguientes datos se pueden compartir en el mismo hilo. esto requiere que el código comercial esté en el mismo subproceso que el proceso de ejecución del código fuente de la transacción Spring antes de que sea controlado por la transacción Spring. Por ejemplo, en el siguiente código, los métodos en el subproceso no estarán. controlado por spring al ejecutar operaciones de transacción Control del método m1 en la transacción.

2 métodos

Método 1: Ver registros

Si usa logback o log4j para generar registros, puede cambiar el nivel de registro al modo de depuración, de modo que Puedes ver registros detallados de ejecución de transacciones y ayudarte a localizar errores

Método 2: depuración de código