Red de conocimiento informático - Problemas con los teléfonos móviles - Propiedades de propagación de transacciones en Spring

Propiedades de propagación de transacciones en Spring

Cuando utilices Spring, utilizarás principalmente sus transacciones declarativas. Simplemente configure algunas reglas en el archivo de configuración y use la función AOP de Spring para manejar fácilmente los problemas de transacción, lo que involucra el atributo de propagación de transacciones Propagación, que se define en la interfaz TransactionDefinition y es utilizado por PlatfromTransactionManager, la interfaz principal de la gestión de transacciones de Spring.

TransactionDefinition está definido por PlatfromTransactionManager y utilizado por Spring. PlatfromTransactionManager PlatfromTransactionManager es la interfaz principal de la gestión de transacciones de Spring

TransactionDefinition

public interface TransactionDefinition {

int getPropagationBehavior()

int getIsolationLevel; ( );

int getTimeout();

booleano isReadOnly()

}

getTimeout ( ) método que devuelve el número de segundos que debe completarse la transacción

isReadOnly() Si la transacción es de solo lectura El administrador de transacciones puede optimizar en función de este valor de retorno para garantizar que la transacción sea de solo lectura

getIsolationLevel() El método devuelve el nivel de aislamiento de la transacción

La interfaz TransactionDefinition define cinco niveles de aislamiento de transacción diferentes ISOLATION_DEFAULT Este es el nivel en el que una transacción está aislada de otras transacciones. . El nivel de aislamiento predeterminado de PlatfromTransactionManager utiliza el nivel de aislamiento de transacciones predeterminado de la base de datos. Los otros cuatro corresponden a los niveles de aislamiento de JDBC. Este es el nivel más bajo de aislamiento de transacciones y permite que diferentes transacciones vean datos no confirmados en esta transacción. Este nivel de aislamiento creará lecturas sucias, lecturas no repetibles y lecturas fantasma

Algunas opciones se proporcionan en la interfaz TransactionDefinition***

PROPAGATION_REQUIRED admite la transacción actual si no hay. transacción actual, se creará una nueva transacción. SUPPORTS Admite la transacción actual, si no hay una transacción actual, se ejecuta de manera no transaccional

PROPAGATION_MANDATORY Admite la transacción actual, si no hay una transacción actual, genera una excepción

PROPAGATION_REQUIRES_NEW Crea una nueva transacción si hay una transacción actual, luego suspende la transacción actual

PROPAGATION_MANDATORY admite la transacción actual y suspende la transacción actual si hay una transacción actual

PROPAGATION_NOT_SUPPORTED realiza la operación de manera no transaccional y suspende la transacción actual (si existe)

PROPAGATION_NEVER realiza la operación de manera no transaccional y lanza una excepción si existe

PROPAGATION_NESTED admite la transacción actual.

Confirmar o revertir el nuevo punto de guardado de la transacción sincronizado con la transacción actual

Ahora, ilustraremos esto mediante un ejemplo. La aplicación de las propiedades de propagación anteriores primero declara dos beans ServiceA y ServiceB, donde se hace referencia a ServiceB p>

ServicioA {

void métodoA () {

métodoB()

}

}

ServicioB {

void métodoB() {

}

}

A continuación, los analizaremos uno por uno .

PROPAGATION_REQUIRED

REQUIRED

Agregue la transacción que se está ejecutando actualmente y que no esté en otra transacción, y luego inicie una nueva transacción. Por ejemplo, si el nivel de transacción de thodB se define como PROPAGATION_REQUIRED, debido a que thodA ya inició una transacción cuando thodA se ejecuta, thodB ya se encuentra ejecutándose en la transacción de thodA y, por lo tanto, no inicia otra transacción. Si thodA se ejecuta y descubre que no está en una transacción, se asigna a sí mismo una transacción para que cualquier excepción en thodA o thodB se revierta. Aunque la transacción de thodB se haya confirmado, thodA debe revertirse en el siguiente error, y Lo mismo ocurre con thodB.

PROPAGATION_REQUIRED p>

PROPAGATION_SUPPORTS

Si actualmente está en una transacción, se ejecuta como una transacción; si no está actualmente en una transacción, se ejecuta; como ejecución no transaccional

PROPAGATION_MANDATORY

Debe estar dentro de una transacción, lo que significa que solo puede ser invocada por una transacción principal. De lo contrario, generará una excepción

PROPAGATION_REQUIRES_NEW

Por ejemplo, si configuramos thodA en PROPAGATION_REQUIRED y thodB en PROPAGATION_REQUIRES_NEW, cuando se ejecute thodB, thodA estará en PROPAGATION_REQUIRED_NEW, thodB estará en PROPAGATION_REQUIRES_NEW, thodB estará en PROPAGATION_NEW_NEW. La diferencia entre una transacción PROPAGATION_REQUIRED y una transacción PROPAGATION_REQUIRES_NEW es el nivel de reversión, porque si thodB es una transacción nueva, entonces hay dos transacciones diferentes. Si thodA ya se ha comprometido, entonces thodA no puede revertir, pero thodB no. Si thodB no logra revertir, la transacción thodA aún puede confirmarse si thodB genera una excepción y thodA detecta la excepción.

PROPAGATION_NOT_SUPPORTED

Actualmente, ninguna transacción admite este nivel.

Si PROPAGATION_REQUIRED y el nivel de transacción de thodB es PROPAGATION_NOT_SUPPORTED, cuando se ejecute thodB, la transacción de thodA se suspenderá y la transacción de thodA se reanudará en un estado sin transacción cuando finalice thodB

PROPAGATION_NEVER

Esta transacción no se puede ejecutar dentro de una transacción.

No se puede ejecutar en una transacción. Supongamos que el nivel de transacción de thodA es PROPAGATION_REQUIRED y el nivel de transacción de thodB es PROPAGATION_NEVER, entonces thodB generará una excepción

PROPAGATION_NESTED

Comprender La clave para Nested es el punto de guardado, que es lo mismo que PROPAGATION_NESTED

La clave para entender Nested es el punto de guardado, que es lo mismo que PROPAGATION_NEVER. La diferencia entre PROPAGATION_REQUIRES_NEW y PROPAGATION_REQUIRES_NEW es que PROPAGATION_REQUIRES_NEW inicia una transacción independiente de la transacción principal, mientras que la transacción anidada depende de la transacción principal. También se confirma cuando la transacción principal se confirma, lo que significa que si la transacción principal se revierte, también debe. retroceder. Es decir, si la transacción principal se revierte, también se revertirá. La ventaja de la transacción anidada es que tiene un punto de guardado

ServicioA {

void métodoA() {

p>

prueba {

thodB();

} captura (Excepción e) {

thodC() {

thodC() {

thodC() { {

thodC()

}

}

} lishixinzhi/Article/program/Java/ky/201311/28910