Red de conocimiento informático - Problemas con los teléfonos móviles - Varias situaciones de falla de transacción de primavera y sus razones

Varias situaciones de falla de transacción de primavera y sus razones

Es posible que hayas visto varias situaciones de fallas en las transacciones de Spring en muchos artículos, así que hoy intentaré ver si puedo obtener algo diferente. Vaya directamente al tema

Motivo del error: el requisito previo para que las transacciones Spring sean válidas es que el servicio debe ser un objeto Bean

Solución: inyectar el servicio en Spring

Motivo del error: Spring solo revertirá las excepciones no comprobadas y las excepciones de error de forma predeterminada

Solución: configurar rollbackFor

Fallo: las transacciones de Spring solo se pueden procesar cuando las excepciones lanzadas por el se capturan los servicios

Motivo: las transacciones de Spring solo se pueden procesar cuando se detectan las excepciones lanzadas por el servicio.

Solución:

1. Lanzar la excepción tal cual

2. Establecer TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); > Motivo del error: el recorte de transacciones de Spring tiene la prioridad más baja, pero si el recorte personalizado tiene la misma prioridad y el recorte personalizado no maneja la excepción correctamente, será lo mismo que la empresa que detecta la excepción. En la misma situación, la empresa detectará su propia excepción

Solución:

1. Lanzar la excepción tal como está en el recorte

2. ) .setRollbackOnly();

Motivo del error: las transacciones Spring deben ser públicas de forma predeterminada para que todos los permisos de los métodos surtan efecto

Solución:

1.

2. Modifique TansactionAttributeSource y cambie publicMethodsOnly a false. Esto se obtiene del seguimiento del código fuente.

3. Abra el modo proxy de AspectJ y obtengalo del documento de primavera.

> Pasos específicos:

1. Introduzca las coordenadas de aspectojrt y los complementos correspondientes en pom

2. Agregue la siguiente configuración a la clase de inicio

Nota: si ejecutándose en idea, se requiere la siguiente configuración

4. Utilice TransactionTemplate directamente

Ejemplo:

Motivo del error: el escaneo el rango del subcontenedor es demasiado grande, el servidor fue escaneado sin configuración de transacción

Solución:

1.

2. No usar padre-hijo contenedores, todos los beans se entregan al mismo contenedor. Una administración de contenedores

Notas: debido a que en el ejemplo se usa springboot, y springboot no tiene contenedores padre-hijo de forma predeterminada cuando se inicia, solo hay uno. un contenedor, por lo que el escenario del ejemplo falla

Motivo: debido a que las transacciones Spring se implementan mediante proxies dinámicos, si un método se modifica usando final, la clase proxy no puede anular el método de destino para incorporar la funcionalidad de transacción

Solución:

1. No utilice el método de modificación final

Solución:

1.

Solución:

1.

Solución:

1:

1. Inyéctate para llamarlo

2. Utilice @EnableAspectJAutoProxy(exposeProxy = true) + AopContext. currentProxy()

Esta es la primera vez que se mejora un método de esta clase sin un proxy.

fuerte> Motivo del error: porque las transacciones de Spring se implementan a través de conexiones de bases de datos y la conexión de bases de datos Spring se coloca dentro de threadLocal. La misma transacción solo puede utilizar la misma conexión de base de datos. En un escenario multiproceso, las conexiones de la base de datos no son las mismas, es decir, pertenecen a diferentes transacciones

Motivo del error: la función de propagación utilizada no admite transacciones

Motivo En caso de error: utilice una función de propagación que no admita transacciones. Motor de almacenamiento. Por ejemplo, MyISAM en mysql

Nota: Porque Springboot habilita el administrador de transacciones de forma predeterminada. DataSourceTransactionManagerAutoConfiguración. Por lo tanto, se omite el ejemplo

Motivo del error: cuando se crea una instancia de la clase de proxy antes que el postprocesador AbstractAutoProxyCreator, el postprocesador AbstractAutoProxyCreator no podrá utilizar las mejoras de la clase de proxy

Este artículo En realidad, hay 14 situaciones en las que las transacciones Spring fallan. Muchas de estas 14 situaciones se atribuyen al mismo tipo de problema, por ejemplo, debido a servidores proxy dinámicos, calificadores de métodos, tipos de excepción, etc.

< p. > /lyb-geek/springboot-learning/tree/master/springboot-transaction-invalid-case