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)
    

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

  • 相关阅读:
    javascript 常见的面试题---数组 && 算法
    JavaScript内置一些方法的实现原理--new关键字,call/apply/bind方法--实现
    javascript 数组排序原理的简单理解
    随笔2
    移动端触摸事件
    前端开发模式的思考层面
    webpack & react项目搭建一:环境
    Webpack的学习
    《Soft Skills: the software developer's life manual》
    前端路由实现
  • 原文地址:https://www.cnblogs.com/liujunwei/p/11573273.html
Copyright © 2011-2022 走看看