Atitit Spring事務配置不起作用可能出現的問題: .是否是資料庫引擎設定不對造成的【筆者就遇到了這個問題,由於筆者使用的是mysql資料,但是在建立表的時候引擎預設(mysql中引擎預設為
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
boolean isCglibProxy=AopUtils.isCglibProxy(userService);
boolean isJdkDynamicProxy=AopUtils.isJdkDynamicProxy(userService);
Map m=Maps.newConcurrentMap();
m.put("isAopProxy", isAopProxy); m.put("isCglibProxy"
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都可以執行事務的。