spring mvc + mybatis事务不起作用

用spring aop配置了事务,但是不起作用,困扰了好久。

事务配置如下:


    
        
    

    
        
    
    
        
           
            
                       
            
        

    

    
    
        
        
    

查网上,有的说是因为spring mvc自动扫描的时候,把包括@service的注解一下都扫描今天了,所以在开始的时候要先排除掉对@service注解的扫描,见帖子:http://www.linuxso.com/architecture/14904.html

配置好之后,事务还是不起作用,很奇怪,之后查找,一个帖子给了很大的启发:http://hi.baidu.com/jakoes/blog/item/7256efc2c7ec30190ff477dc.html,说是Spring的事务实现采用基于AOP的拦截器来实现,如果没有在事务配置的时候注明回滚的checked exception,我的代码中抛的是java.lang.Exception,改成抛RuntimeException,事务起作用了。帖子中说两种办法可以解决:

1,在事务属性后面加上需要回滚的checked exception。比如PROPAGATION_REQUIRED,-XXXXException(注意那个"-",对应的是"+")

2, 不改配置文件,将需要事务回滚的异常继承自 unchecked exception 类,也就是 RuntimeException

那么对于第二种方法,我的是起作用了,但是第一种方法我的是声明了对Exception回滚了啊。后来一想,是不是要写全java类名啊,于是改成:

rollback-for="java.lang.Exception"/>,这样就起作用了。看来还是自己大意了,spring的配置文件要写全类名的。


你可能感兴趣的:(spring mvc + mybatis事务不起作用)