Una breve introducción a los atributos de propagación de transacciones de bases de datos comunes y los niveles de aislamiento de transacciones admitidos por Spring

Las propiedades de la transacción:

Familiaridad con los asuntos:

        1) propagación: se utiliza para establecer el comportamiento de propagación de la transacción

         Comportamiento de propagación de transacciones: cuando un método se ejecuta en un método que ha abierto una transacción, ya sea que el método actual use la transacción original o abra una nueva transacción

             -Propagation.REQUIRED: valor predeterminado, use la transacción original

             -Propagation.REQUIRES_NEW: Suspenda la transacción original y comience una nueva transacción

 

         2) aislamiento: se utiliza para establecer el nivel de aislamiento de la transacción

           Nivel de aislamiento de la transacción : el grado de aislamiento de una transacción de otras transacciones se denomina nivel de aislamiento. Cuanto mayor sea el nivel de aislamiento, mejor será la consistencia de los datos, pero más débil será la concurrencia

 

El trasfondo es comprar libros y revertir la base de datos cuando el dinero no es suficiente.

@Autowired

private BookService bookService;



@Transaction

public void checkOut(){

		bookService.purchase();

}



@Transaction(propagation=Propagation.REQUIRES_NEW,isolation=Isolation.REPEATABLE_READ)

public void purchase(){}

También hay una transacción checkOut fuera de la compra.

1) Si la transacción de compra REQUIERE comportamiento de propagación:

Cuando el método purchase () de bookService es llamado por otro método de transacción checkOut (), se ejecutará en la transacción existente de forma predeterminada. El comportamiento de propagación predeterminado es OBLIGATORIO. Por lo tanto, solo hay una transacción dentro del límite inicial y final del método checkOut (). Esta transacción solo se envía al final del método checkOut (). Como resultado, el usuario no puede comprar un libro.

2) REQUIRES_NEW comportamiento de propagación

Este método debe iniciar una nueva transacción y ejecutarse dentro de su propia transacción. Si hay una transacción en ejecución, primero debe suspenderse. El siguiente resultado es que el primer libro es suficiente dinero para comprar y el segundo libro no es suficiente dinero para comprar. En lugar de la situación como 1), cuando la segunda copia no es suficiente dinero, se revertirá y la primera copia no se podrá comprar.

 

Nivel de aislamiento de transacciones

1) Leer no comprometido: LEER SIN COMPROMISO

Permitir que Transaction01 lea los cambios no confirmados de Transaction02

 

2) Se ha enviado la lectura: READ COMMITTED ( 开发时通常使用的隔离级别)

Requiere que Transaction01 lea solo los cambios enviados por Transaction02

 

3) Lectura repetible: LECTURA REPERTABLE

Asegúrese de que Transaction01 pueda leer el mismo valor de un campo varias veces, es decir, durante la ejecución de Transaction01, otras transacciones no pueden actualizar este campo.

 

4) Serialización: SERIALIZABLE

Asegúrese de que Transaction01 pueda leer la misma fila de una tabla varias veces. Durante la ejecución de Transaction01, prohíba que otras transacciones agreguen, actualicen y eliminen operaciones en esta tabla . Puede evitar problemas de simultaneidad de tareas, pero el rendimiento es muy bajo

 

Problema de concurrencia de transacciones de base de datos

Lectura sucia: se lee el valor actualizado y el valor leído antes de la reversión es incorrecto

Lectura no repetible: leer un valor, volver a leerlo después de la modificación, las dos lecturas son inconsistentes (pero el requisito es ser consistente)

Lectura fantasma: lea una parte, inserte una nueva en la tabla, muévala de nuevo, algunas filas adicionales

 

Supongo que te gusta

Origin blog.csdn.net/di_ko/article/details/114920764
Recomendado
Clasificación