• 配置事务以及事务回滚


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

    事务传播机制

    事务传播行为类型

    说明

    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!!!!

  • 相关阅读:
    如何导出视图中的数据
    swift中的流程控制
    PostgreSQL导出sql脚本文件
    Java分享笔记:使用缓冲流复制文件
    Java分享笔记:FileOutputStream流的write方法
    Java分享笔记:FileInputStream流的 read()方法 和 read(byte[] b)方法
    Java分享笔记:File类中常用方法的介绍
    Java分享笔记:使用entrySet方法获取Map集合中的元素
    Java分享笔记:使用keySet方法获取Map集合中的元素
    Java分享笔记:Map集合(接口)的基本方法程序演示
  • 原文地址:https://www.cnblogs.com/ztm1021810064/p/8588239.html
Copyright © 2020-2023  润新知