zoukankan      html  css  js  c++  java
  • spring 事务无效解决方法

    (原)

    spring 事务目前有二种,声明式(declarative transaction)和编程式(programming transaction),以前都是以公司里的框架写好的,没有学习的机会,今天抽空好好试了下,结果遇到好多问题。

    1、注解的方式

    最开始是这么玩的,发现数据进数据库了,没有起作用,然后各种搜索,终于找到问题了,在@Transactional中,默认只有抛出运行时异常才会回滚,也就是说throw new RuntimeException();而我这里是Exception。

    在spring的文档中说道,spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。

    在这里,RuntimeException是非检查型异常,Exception是检查型异常

    这里有二种解决办法,1、将Exception类改为RuntimeException类抛出,2、将@Transactional注解改为@Transactional(rollbackFor = Exception.class),也就是说检查型异常一样回滚。二种改法结果测试都通过。

    2、配置XML(需要aspectj的支持)

    由于是在网上找的例子建的ssm框架,例子中并没有事务,所以才需要添加,注解的方式成功后,下面来试试声明式的,结果一上来就发现报错

     

    网上搜了一下,发现是少jar包引起的

    ava.lang.NoClassDefFoundError:org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException

    缺少的两个jar包:aspectjrt.jar;aspectjweaver.jar ,这是springAOP所依赖的包

    加进这二个JAR包以后,启动成功。

    跟注解式的一样,抛出Exception异常数据一样进数据库,而抛出RuntimeException异常成功回滚,然后在tx:method中一样找到了rollback-for的属性,加上去后,Exception异常也能成功回滚了

     3、 Spring的AOP中,XML注入TransactionProxyFactoryBean这个类

  • 相关阅读:
    java扫描文件夹下面的所有文件(递归与非递归实现)
    JAVA8 十大新特性详解
    Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
    Spring官网下载各版本jar包
    史上最全Java面试题(带全部答案)
    深入JVM对象引用
    23种设计模式全解析
    git difftool和mergetool图形化
    Java技术——你真的了解String类的intern()方法吗
    动手实现一个vue中的模态对话框组件
  • 原文地址:https://www.cnblogs.com/LeeScofiled/p/6867408.html
Copyright © 2011-2022 走看看