zoukankan      html  css  js  c++  java
  • spring事务理解

    1.事务的隔离级别
    REQUIRED:如果存在一个事务,则在当前事务中执行,如果没有存在一个事务,在需要开启一个事务。
    SUPPORTS:如果存在一个事务,则在当前事务中执行,如果没有存在一个事务,则不在事务中执行。
    MANDATORY(强制性mandatory):如果存在一个事务,则在当前事务中执行,如果没有存在一个事务,则抛出异常。
    REQUIRES_NEW:总是开启一个事务,如果存在一个事务,则把这个事务挂起。在开启的新事务中执行。
    NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
    PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作
    注:
    1.对于上面说的,都是在方法中。如下面方法:
    managePersonRxTd(id){
    deletePerson(id)
    updateAdd(id)
    }
    如果是deletePerson方法配置的为REQUIRED,如果managePersonRxTd方法存在事务,则deletePerson在managePersonRxTd的事务中运行。
    否则deletePerson在自己的事务中运行。
    2.事务都是针对方法的,但是spring声明式事务是配置到类的,也就是那些类参与事务。如下面的配置,aop:config是配置参与事务的类
    3.事务是一个整体。
    4.一般是有嵌套事务的


    <bean id="cmsTransactionManager"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource">
    <ref bean="xcmDataSource" />
    </property>
    </bean>
    <aop:config>
    <aop:pointcut id="cmsManagerServiceMethod"
    expression="execution(* com.xcm.cms.service..*Service*.*(..))" />
    <aop:advisor advice-ref="possTxAdvice" pointcut-ref="cmsManagerServiceMethod"/>
    </aop:config>

    <tx:advice id="possTxAdvice" transaction-manager="cmsTransactionManager">
    <tx:attributes>
    <tx:method name="*" propagation="SUPPORTS" rollback-for="com.common.item.base.exception.AppException" />
    <tx:method name="insert*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
    <tx:method name="create*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
    <tx:method name="delete*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
    <tx:method name="update*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
    <tx:method name="*SpTx" propagation="SUPPORTS" rollback-for="com.common.item.baseexception.AppException" />
    <tx:method name="*NsTx" propagation="NOT_SUPPORTED" />
    <tx:method name="*RnTx" propagation="REQUIRES_NEW" rollback-for="com.common.item.base.exception.AppException" />
    </tx:attributes>
    </tx:advice>

  • 相关阅读:
    JAVA 分布式
    Spring Boot -01- 快速入门篇(图文教程)
    MyBatis -01- 初识 MyBatis + MyBatis 环境搭建
    Vue 框架-12-Vue 项目的详细开发流程
    Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置
    Vue 框架-10-搭建脚手架 CLI
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/yanghuiping/p/5456507.html
Copyright © 2011-2022 走看看