Atitit Spring事务配置不起作用可能出现的问题:
.是否是数据库引擎设置不对造成的【笔者就遇到了这个问题,由于笔者使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为MyISAM,是不支持事务操作的),需要修改为InnoDB,就可以支持事务操作了】
- 入口函数必须是public,否则事务不起作用。这一点由Spring的AOP特性决定的。
1、首先使用如下代码 确认你的bean 是代理对象吗?
AopUtils.isAopProxy()
AopUtils.isCglibProxy() //cglib
AopUtils.isJdkDynamicProxy() //jdk动态代理
如果不是 那么就是切入点配置出错了 或者如果你使用了springmvc,可能是context:component-scan重复扫描引起的:
UserService userService = context.getBean(UserService.class);
// 调用userService的方法执行
userService.test();
userService.addUser1(" user2222");
boolean isAopProxy=AopUtils.isAopProxy(userService);
boolean isCglibProxy=AopUtils.isCglibProxy(userService);
boolean isJdkDynamicProxy=AopUtils.isJdkDynamicProxy(userService);
Map m=Maps.newConcurrentMap();
m.put("isAopProxy", isAopProxy); m.put("isCglibProxy", isCglibProxy); m.put("isJdkDynamicProxy", isJdkDynamicProxy);
System.out.println(JSON.toJSONString(m));//{"isCglibProxy":true,"isAopProxy":true,"isJdkDynamicProxy":false}
2、如果是aop代理,那么说明代理成功,那么可能是如使用mysql且引擎是MyISAM造成的(因为不支持事务),改成InnoDB即可。
3、 如果你是基于类的代理,而非接口,如果想代理父类里的,可以用
execution(* com.sishuok.es..service..*+.*(..))
Spring事务不起作用 问题汇总 - 《亿级流量网站架构核心技术》_ - ITeye博客.html
是不是同一class没关系的。。只有一个service的俩个method都可以执行事务的。