zoukankan      html  css  js  c++  java
  • 声明式事务

    声明式事务

    1 事务与声明式事务的区别

    1.事务:

    把多个操作绑定在一起,要么全部成功,要么全部失败

    2.声明式事务:

    在程序中,指定开启或回滚事务的规则,程序根据设定好的规则,自动开启或回滚事务

    2 声明式事务

    2.1 我们第一步找到spring的配置文件
    2.2 第二步我们就需要在你的标签里添加一下代码
    <!-- 定义事务管理器 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    

    ref=dataSource:这个dataSource是配置我们spring和MyBatis整合配置数据源的、

    详情请看文档的第三点:spring和mybatis整合

    2.3 设置事务属性
    <!--  设置事务属性-->
         <tx:advice id="txAdvice" transaction-manager="transactionManager">
           <!-- 声明事务属性,定义事务开启规则-->
            <tx:attributes>
                <tx:method name="find*" propagation="SUPPORTS" read-only="true"  />
                <tx:method name="get*" propagation="SUPPORTS" />
                <tx:method name="add*" propagation="REQUIRED" />
                <tx:method name="del*" propagation="REQUIRED" />
                <tx:method name="update*" propagation="REQUIRED" />
                <tx:method name="*" propagation="REQUIRED" />
            </tx:attributes>
        </tx:advice>
    

    我们的事务属性这里就简约的说一下事务传播机制:

    SUPPORTS

    表示如果存在一个事务,则支持当前事务,如果没有,则按非事务方式执行

    REQUIRED

    表示如果存在一个事务,则支持当前事务,如果没有,则自己开启一个新的事务

    补充:

    REQuIRES_NEW:

    表示总是开启一个新事务,如果一个事务已经存在,则将这个存在的挂起,开启新的事务

    还有等等 比如NESTED....

    而这个标签的name属性里面填写的是,你需要做的增删改查功能是什么需要开启事务传播机制

    2.4 定义切面

    因为我们事务是在spring增强的功能上实现的,所以我们还需要定义切面

    <!-- 定义切面-->
     <aop:config>
     <!--   定义切面-->
        <aop:pointcut id="serviceMethod" expression="execution(* com.t239.service..*.*(..))" />
        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod" />
    </aop:config>
    

    我们这就完成了声明式事务,我们还有一种方法就是使用注解形式

    3 注解事务

    我们做注解事务就更加简单一点:

    3.1 首先我们第一步还是先定义事务管理器
    <!-- 定义事务管理器 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    3.2 我们第二步启动注解事务

    将定义的事务管理器添加进去

    <!-- 启动注解事务 -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    
    3.3 我们就可以在你的需要事务处理的方法前加注解

    我们通过注解进行事务回滚,以及提交,注解如下:

    @Transactional
    

    将这个注解添加到类前面,这个类所有的方法有有事务回滚提交功能

    将这个添加到方法前,就只能对方法使用

    Transactional的属性不止一种,有很多比如:

    @Transactional(propagation= Propagation.SUPPORTS)
    @Transactional(propagation=Propagation.REQUIRED)
    

    等等等,这里就不一一解释说明了

  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/liujunwei/p/11573273.html
Copyright © 2011-2022 走看看