Comprensión de la gestión declarativa de transacciones en primavera

El significado de la gestión declarativa de transacciones: el nombre del método en el servicio determinará si el método utiliza transacciones.

Configuración de transacción en applicationContext.xml

<!--事务管理的 增强-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--被管理的 方法, 需要事务的方法-->
            <!--
                isolation: 事务的隔离级别  default数据库缺省的隔离级别
                read-only: 确定是否是 只读事务,
                propagation: 事务的传播级别,  常用required , supports   只读事务选support 需要事务就required
                rollback-for: 异常的类型,回滚
                no-rollback-for: 异常类型,进行提交
            -->
            <!--声明式的事务管理 service中方法起什么名字就将决定是否使用事务-->
            <tx:method name="transfer*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />
            <tx:method name="insert*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />
            <tx:method name="delete*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />
            <tx:method name="remove*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />

            <tx:method name="find*" isolation="DEFAULT" read-only="true" propagation="SUPPORTS" />
            <tx:method name="select*" isolation="DEFAULT" read-only="true" propagation="SUPPORTS" />
        </tx:attributes>
    </tx:advice>

    <!--增强 和 事务管理对象切入-->
    <aop:config>
        <aop:pointcut id="txPointCut"
                expression="execution(* com.chinasoft.spring.service.impl.AccountServiceImpl.*(..))"
        ></aop:pointcut>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut" ></aop:advisor>
    </aop:config>

En el archivo applicationContext.xml, los métodos que comienzan con transferir, insertar, eliminar y eliminar se definen primero para habilitar la transacción

Y los métodos al principio de buscar y seleccionar no usan transacciones

<tx:method name="transfer*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />
<tx:method name="insert*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />
<tx:method name="delete*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />
<tx:method name="remove*" isolation="DEFAULT" read-only="false" propagation="REQUIRED" />

<tx:method name="find*" isolation="DEFAULT" read-only="true" propagation="SUPPORTS" />
<tx:method name="select*" isolation="DEFAULT" read-only="true" propagation="SUPPORTS" />

Los métodos de la clase de interfaz de servicio son los siguientes

public interface AccountService {
    
    

    // 删除 用户信息
    void deleteAccount(Integer id);

    // 进行银行的账号之间的转账
    void transfer(String from, String to, float money) throws Exception;

    List<Account> findAll();
}

Los métodos deleteAccount y transferencia utilizarán la gestión de transacciones.

El método findAll no utiliza la gestión de transacciones.

Resumen: La gestión declarativa de transacciones primero define qué métodos de nomenclatura utilizan transacciones y nombra los métodos según se habiliten las transacciones.

Supongo que te gusta

Origin blog.csdn.net/Hambur_/article/details/110517392
Recomendado
Clasificación