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