以前同事在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();
}
}
这样为什么不行呢
应该是不能在同一类中,因为同一个类中的方法间的调用是不会走代理的;你这样Spring会直接忽略你的声明。
把你的方法b() 放到别的类中,(比如新建一个class A), 然后 在这个action中调用这个方法。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。