abcbuzhiming 2014-03-22 11:53 采纳率: 0%
浏览 432
已采纳

spring的事务控制,嵌套调用时为何不起效

我写的一个项目,用spring管理service层事务,利用aop:config织入service层,然后配置tx:advice,设置tx:method标签,name="delete*","insert*","update*",满足这三种特征的service方法,能正常实现再异常时回滚。但是,我在service定义了另外一个没有带着个特征的方法,比如
userRegedit(){}
在这个方法里调用"insert*"方法,未使用任何try catch,从控制台上看异常被抛出,但是事务却没回滚,请问这是为什么?难道说spring只能看到最终抛出异常的方法,被调用方法是不管的?

  • 写回答

5条回答 默认 最新

  • 征服.刘华强 2014-03-24 09:26
    关注

    http://www.cnblogs.com/daxin/p/3393855.html
    你直接调用insertAAA 是Proxy.insertAAA() 代理对象加了事物。
    你是调用的BBB 那么是这样的 proxy.BBB 代理对象调用了BBB方法。
    然后你BBB里调用了AAA 那等于是这样的 target.aaa() 是目标对象调用的。
    所以事物就不起作用了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 征服.刘华强 2014-03-22 14:57
    关注

    配置和代码贴出来看看。你这么用语言描述根本不知道你错在什么地方?Spring默认不会回滚Execption 默认只回滚RunTimeException以及其子类。

    评论
  • niejun1985 2014-03-22 18:35
    关注

    userRegedit方法中如果使用this调用本类的方法,这个方法并不是经过spring代理对象调用,所以AOP的切入是没有的。

    评论
  • hoocen 2014-03-23 22:57
    关注

    从问题的描述来看,问题出现在事务的传播上,可能你对事务的传播类型还不是很了解。不知道你在tx:method中怎样配置的事务传播类型。
    你可以使用类似下面的配置,对说有函数使用SUPPORTS类型的事务传播级别
    [code="java"]
    transaction-manager="transactionManager">
    tx:attributes




    /tx:attributes
    /tx:advice
    [/code]
    事务传播类型:

    PROPAGATION_REQUIRED: 如果存在一个事务, 则支持当前事务. 如果没有事务则开启一个新的事务.<--常用

    PROPAGATION_SUPPORTS: 如果存在一个事务, 支持当前事务. 如果没有事务, 则非事务的执行.<--常用
    PROPAGATION_MANDATORY: 如果已经存在一个事务, 支持当前事务. 如果没有一个活动的事务, 则抛出异常.

    PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务. 如果一个事务已经存在, 则将这个存在的事务挂起.<--嵌套事务
    PROPAGATION_NOT_SUPPORTED: 总是非事务地执行, 并挂起任何存在的事务
    PROPAGATION_NEVER: 总是非事务地执行, 如果存在一个活动事务, 则抛出异常

    PROPAGATION_NESTED: 如果一个活动的事务存在, 则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行.

    评论
  • weixin_42691222 2014-03-24 17:05
    关注

    需要不同的方法放到不同的类里,然后再配重开事务,这样就可以啦

    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 activity升级到flowable工作流act_ge_bytearray的草稿json数据复制到act_de_model 的model_editor_json的脚本
  • ¥15 cvi使用CreateThread创建线程时,出现存储空间不足无法处理此命令的错误
  • ¥15 求苹果推信imessage批量推信技术
  • ¥15 ubuntu 22.04 系统盘空间不足。隐藏的docker空间占用?(相关搜索:移动硬盘|管理系统)
  • ¥15 利用加权最小二乘法求亚马逊各类商品的价格指标?怎么求?
  • ¥15 c++ word自动化,为什么可用接口是空的?
  • ¥15 Matlab计算100000*100000的矩阵运算问题:
  • ¥50 VB6.0如何识别粘连的不规则的数字图片验证码
  • ¥16 需要完整的这份订单所有的代码,可以加钱
  • ¥30 写一个带界面控制的机房电脑一键开机关机并且实时监控的软件