zoukankan      html  css  js  c++  java
  • 配置事务以及事务回滚

    下表显示了不同隔离级别允许的并发副作用。
    隔离级别
    脏读
    虚拟读取
    未提交读
    已提交读
    快照

    事务传播机制

    事务传播行为类型

    说明

    PROPAGATION_REQUIRED

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

    PROPAGATION_SUPPORTS

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

    PROPAGATION_MANDATORY

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

    PROPAGATION_REQUIRES_NEW

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

    PROPAGATION_NOT_SUPPORTED

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

    PROPAGATION_NEVER

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

    PROPAGATION_NESTED

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

    当使用 PROPAGATION_NESTED 时, 底层的数据源必须基于 JDBC 3.0 ,并且实现者需要支持保存点事务机制。

     

    话不多说,实例走起

    实例为是购买股票的案例,实例不是重点,重点是如何配置事务

    第一种

     <!--第一种配置TransactionProxyFactoryBean  事务代理工厂bean-->
        <bean class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager" ref="transactionManager"></property>
            <property name="target" ref="cgyService"></property>
            <property name="transactionAttributes">
                <props>
                    <prop key="cgy">ISOLATION_DEFAULT,PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean>

    其中key的值为方法名添加事务回滚的话,在prop节点中添加 “-异常类”,

    第二种 

    <!--第二种 事务注解失败-->
     <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

    相当简洁的一句话,但需要在类中加入@Transaction();

    添加事务回滚:

    @Transactional(rollbackFor = cgyException.class)

    rollbackFor= 异常类.class

    第三种
     <!--第三种 使用Aspectj aop 配置-->
        <tx:advice id="myadvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="cgyService" isolation="DEFAULT" propagation="REQUIRED" rollback-for="cgyException"/>
            </tx:attributes>
        </tx:advice>
    
        <aop:config>
            <aop:pointcut id="myPoint" expression="execution(* *..dome06.service.*.*(..))"></aop:pointcut>
            <aop:advisor advice-ref="myadvice" pointcut-ref="myPoint"></aop:advisor>
        </aop:config>

    事务回滚就是rollback-for=“异常类”;

    ok!!!!

  • 相关阅读:
    类的继承,抽象类和接口
    什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI?
    php 中 SERVER 服务器参数
    数组与对象互换方法
    php实现二维数组查找功能【array_search 和 array_column】
    php基础知识点列表【2020年10月7日】
    json_encode 中文及特殊斜杆的编码
    吴裕雄--天生自然ANDROID开发学习:2.5.8 Notification(状态栏通知)详解
    吴裕雄--天生自然ANDROID开发学习:2.5.7 Toast(吐司)的基本使用
    吴裕雄--天生自然ANDROID开发学习:2.5.6 ViewFlipper(翻转视图)的基本使用
  • 原文地址:https://www.cnblogs.com/ztm1021810064/p/8588239.html
Copyright © 2011-2022 走看看