zoukankan      html  css  js  c++  java
  • Spring事务管理方式

    如果不配置spring的事务,那么默认每次执行dao层方法即自动提交事务。

     <!--配置事务管理器-->
        <bean id="transactionManager"
              class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!--配置datasource-->
            <property name="dataSource" ref="dataSource"/>
        </bean>
    
        <!--配置事务传播特性和 事务隔离级别-->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <!--配置事务传播特性 method为方法名, propagation配置事务传播特性
                 isolation="" 指定事务隔离级别-->
                <!-- name:指定切入点的方法名,匹配的方法才能够指定到事务传播特性和隔离级别-->
                <tx:method name="save*" propagation="REQUIRED"  isolation="READ_COMMITTED" />
                <tx:method name="insert*" propagation="REQUIRED" isolation="SERIALIZABLE"/>
                <tx:method name="update*" propagation="REQUIRED" />
                <tx:method name="delete*" propagation="REQUIRED" />
                <!--查询操作 配置read-only=true,标识为只读事务。-->
                <tx:method name="find*" propagation="REQUIRED" read-only="true" />
                <tx:method name="get*" propagation="REQUIRED" read-only="true" />
                <tx:method name="select*" propagation="REQUIRED" read-only="true" />
            </tx:attributes>
        </tx:advice>

    Spring事务管理方式有两种

    1)    编程式事务:以java编码的方式来实现事务的管理。基本不使用。

    2)    声明式事务:只需要申明配置事务的处理方式,spring会自动进行事务管理。

    a.        事务管理器

    b.       事务的传播特性:事务的传播特性用来定义事务中又存在事务的情况下,该如何来处理事务。(Service层方法调用service层方法时)

    a)       Required:必须,必须有一个事务,如果没有,则会开启一个事务。如果有,则使用当前事务。(默认)

    b)       Requireds_new:(需要自己的新的事务) 必须运行在自己的事务中,即使当前方法存在一个事务,也会新建一个自己的事务。执行本身事务时,会将外部事务挂起。

    c)        Nested:(嵌套)可以多个事务嵌套在一起,内部事务不会影响外部事务,外部事务回滚,会影响到内部事务回滚。

    d)       Mandtory: (必须有事务)要求必须有事务,没有事务就抛出异常。

    e)       Never:(永不) 不支持事务,有事务就抛出异常。

    f)        Supports:(支持) 如果 有事务和没有事务都支持。

    g)       not_supported :(不支持事务),有事务存在,便不运行,直到事务提交后再执行。

    c.        事务的隔离级别:

    a)       READ_UNCOMMITTED:读未提交

    b)       READ_COMMITTED:读已提交

    c)        REPEATABLE_READ:可重复读

    d)       SERIALIZABLE:串行化

    e)       DEFAULT:按照数据库默认的隔离级别。(默认)

    d.       事务AOP,将事务切入到对应的方法。

    e.        以注解的形式配置

    a)       在spring的配置文件中配置启用事务注解

    <tx:annotation-driven/>

    b)       在需要事务处理的类或方法上面添加事务注解

      @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED)

  • 相关阅读:
    二叉树 排序二叉树-可以通过中序遍历得到排序的数据 二叉排序树时间复杂度O(logn),
    双链表排序
    Linux C 单链表 读取文件 并排序 实例并解释
    Linux 中文乱码问题
    双向链表排序
    玩转iOS开发
    Firefox OS简单介绍
    深入理解Dalvik虚拟机- 解释器的执行机制
    菜鸟学Struts——I18N对国际化的支持
    【leetcode】Flatten Binary Tree to Linked List
  • 原文地址:https://www.cnblogs.com/xie-qi/p/13034627.html
Copyright © 2011-2022 走看看