zoukankan      html  css  js  c++  java
  • 关于Spring 中的事务

    Spring中配置事务的方式有两种:xml配置事务,注解式事务

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    A.xml配置事务

        eg:  

                       <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
                               <tx:attributes>
                                       <tx:method name="get*" read-only="true" propagation="REQUIRED" />
                                      <tx:method name="delete*" propagation="REQUIRED" />
                                      <tx:method name="update*" propagation="REQUIRED" />
                                      <tx:method name="insert*" propagation="REQUIRED" />
                                      <tx:method name="*" propagation="REQUIRED" />
                              </tx:attributes>
                       </tx:advice>
                      <aop:config>
                               <aop:pointcut id="transactionPointCut" expression="execution(* com.zgj.service..*.*(..))"/>
                               <aop:advisor pointcut-ref="transactionPointCut" advice-ref="transactionAdvice"/>
                      </aop:config>

     <tx:method/> 有关的设置

    属性是否需要?默认值描述
    name  

    与事务属性关联的方法名。通配符(*)可以用来指定一批关联到相同的事务属性的方法。 如:'get*''handle*''on*Event'等等。

    propagation REQUIRED 事务传播行为
    isolation DEFAULT 事务隔离级别
    timeout -1 事务超时的时间(以秒为单位)
    read-only false 事务是否只读?
    rollback-for  

    将被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException'

    no-rollback-for  

     被触发进行回滚的 Exception(s);以逗号分开。 如:'com.foo.MyBusinessException,ServletException'

    Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:

    事务传播行为类型

    说明

    PROPAGATION_REQUIRED

    如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

    PROPAGATION_SUPPORTS

    支持当前事务,如果当前没有事务,就以非事务方式执行。

    PROPAGATION_MANDATORY

    使用当前的事务,如果当前没有事务,就抛出异常。

    PROPAGATION_REQUIRES_NEW

    新建事务,如果当前存在事务,把当前事务挂起。

    PROPAGATION_NOT_SUPPORTED

    以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

    PROPAGATION_NEVER

    以非事务方式执行,如果当前存在事务,则抛出异常。

    PROPAGATION_NESTED

    如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类 似的操作。

    <aop:config> 中expression说明
                        任意公共方法的执行:
                        execution(public * *(..))
                        任何一个以“set”开始的方法的执行:
                        execution(* set*(..))
                        AccountService 接口的任意方法的执行:
                        execution(* com.xyz.service.AccountService.*(..))
                        定义在service包里的任意方法的执行:
                        execution(* com.xyz.service.*.*(..))
                        定义在service包和所有子包里的任意类的任意方法的执行:
                        execution(* com.xyz.service..*.*(..))
                        定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
                        execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
                        ***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    B.注解式事务
                   eg:
                       <tx:annotation-driven transaction-manager="transactionManager" />
     
     
    C.事务说明
     
       因是在service上加入的事务,当时环境是mybatis环境,当在一个有REQUIRED事务的service中进行

             userMapper.addUser(user);
             userMapper.deleteUserById(1);

            当有一个有异常的时候两个都变现为不成功

     
     
  • 相关阅读:
    AcWing 852. spfa判断负环 边权可能为负数。
    面试题 02.01. 移除重复节点
    1114. 按序打印
    剑指 Offer 38. 字符串的排列
    557. 反转字符串中的单词 III
    645. 错误的集合
    面试题 05.03. 翻转数位
    1356. 根据数字二进制下 1 的数目排序
    748. 最短完整词
    剑指 Offer 32
  • 原文地址:https://www.cnblogs.com/zhangguangju/p/4936559.html
Copyright © 2011-2022 走看看