您的位置:首页 > 编程语言 > Java开发

Atitit Spring事务配置不起作用可能出现的问题: .是否是数据库引擎设置不对造成的【笔者就遇到了这个问题,由于笔者使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为

2018-11-22 22:30 1091 查看

Atitit Spring事务配置不起作用可能出现的问题:

 

.是否是数据库引擎设置不对造成的【笔者就遇到了这个问题,由于笔者使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为MyISAM,是不支持事务操作的),需要修改为InnoDB,就可以支持事务操作了

  1. 入口函数必须是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都可以执行事务的。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐