开发者社区> 问答> 正文

spring事物在action里没有效果。

以前同事在action里写了个方法,为了要事物,在上面加了@Transactional(rollbackFor = { Exception.class })
但是他在方法里面都try catch了,真是服了。现在领导要我改一下,问题在于,我们架子超级烂,如果在action里丢了异常,页面上就有错。我又不想费老大劲把代码都移到service里,于是我把这个方法的异常都丢出来,然后在action里又写了个方法调用这个方法,在另外的方法里调用这个方法,并处理异常,现在问题来了,竟然没有事物,没回滚。

我大概知道spring是通过代理类,来监控方法是否抛出异常来回滚。但是spring好像没有监控到方法级别啊,这个为什么不回滚了?在service里貌似可以啊

class action{
   public string a(){
      try{
         return b();
       }catch{
           
        }
   }
 
   @Transactional(rollbackFor = { Exception.class })
   public String b() throws Exception{
      throw new Excepiton();
   }
}

这样为什么不行呢

展开
收起
a123456678 2016-03-17 13:49:22 1935 0
1 条回答
写回答
取消 提交回答
  • 应该是不能在同一类中,因为同一个类中的方法间的调用是不会走代理的;你这样Spring会直接忽略你的声明。

    把你的方法b() 放到别的类中,(比如新建一个class A), 然后 在这个action中调用这个方法。

    2019-07-17 19:05:15
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多