配置springMVC时事务失效的解决方案

参考:http://jinnianshilongnian.iteye.com/blog/1850432

主要看我评论的内容,我是已经正常解决了的。

我的评论如下:

我在代码中加入了这三个方法:
AopUtils.isAopProxy()
AopUtils.isCglibProxy() //cglib
AopUtils.isJdkDynamicProxy()
但是仍然都是返回false,不过我的事务起作用了,原因就是你说的覆盖了原来扫描的Service和Dao,我的修改是这样的
原来的代码:
<context:component-scan base-package="com.linjia.web"  >
</context:component-scan>
改正后:
<context:component-scan base-package="com.linjia.web.controller"  >
</context:component-scan>

这里只需要扫描controller就行了,不要整个都扫描,否则会覆盖,从而引起事务失效

原内容如下:

总有很多朋友询问spring事务不起作用怎么回事,这里我汇总下,欢迎补充:

 

1、首先使用如下代码 确认你的bean 是代理对象吗?

AopUtils.isAopProxy()

AopUtils.isCglibProxy() //cglib

AopUtils.isJdkDynamicProxy() //jdk动态代理

 

如果不是 那么就是切入点配置出错了 或者如果你使用了springmvc,可能是context:component-scan重复扫描引起的:

http://jinnianshilongnian.iteye.com/blog/1423971

http://jinnianshilongnian.iteye.com/blog/1762632

http://jinnianshilongnian.iteye.com/blog/1857189

 

2、如果是aop代理,那么说明代理成功,那么可能是如使用mysql且引擎是MyISAM造成的(因为不支持事务),改成InnoDB即可。

 

3、 如果你是基于类的代理,而非接口,如果想代理父类里的,可以用

execution(* com.sishuok.es..service..*+.*(..))  

//+表示子类的也扫描(参考http://jinnianshilongnian.iteye.com/blog/1420691

 

欢迎补充。

猜你喜欢

转载自sky-xin.iteye.com/blog/2308636