1. 程式人生 > >Atitit Spring事務配置不起作用可能出現的問題: .是否是資料庫引擎設定不對造成的【筆者就遇到了這個問題,由於筆者使用的是mysql資料,但是在建立表的時候引擎預設(mysql中引擎預設為

Atitit Spring事務配置不起作用可能出現的問題: .是否是資料庫引擎設定不對造成的【筆者就遇到了這個問題,由於筆者使用的是mysql資料,但是在建立表的時候引擎預設(mysql中引擎預設為

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都可以執行事務的。