zyskm用夢想丈量人生,用奔跑丈量激情

          spring聲明性事務(wù)常見問題分析(續(xù))

          上一篇說明了一種spring事務(wù)配置方式,這次補上另一種。
          見配置文件:
          <!-- 事務(wù)攔截 -->
              
          <tx:advice id="txAdvice" transaction-manager="transactionManager">
                  
          <tx:attributes>
                      
          <tx:method name="get*" propagation="REQUIRED" read-only="true" />
                      
          <tx:method name="find*" propagation="REQUIRED" read-only="true" />
                      
          <tx:method name="search*" propagation="REQUIRED" read-only="true" />
                      
          <tx:method name="save*" propagation="REQUIRED" />
                      
          <tx:method name="modify*" propagation="REQUIRED" />
                      
          <tx:method name="send*" propagation="REQUIRED" />
                      
          <tx:method name="revoke*" propagation="REQUIRED" />
                      
          <tx:method name="del*" propagation="REQUIRED" />
                      
          <tx:method name="logging*" propagation="NOT_SUPPORTED" read-only="true" />
                      
          <tx:method name="*" propagation="SUPPORTS" read-only="true"  />
                  
          </tx:attributes>
              
          </tx:advice>
              
          <aop:config>
                  
          <aop:pointcut id="projectServiceOperation" expression="execution(* cn.ceopen.bss..*.service..*(..))" />
                  
          <aop:advisor pointcut-ref="projectServiceOperation" advice-ref="txAdvice" />
              
          </aop:config>

          重點說明兩點:
          1.<aop:pointcut id="projectServiceOperation" expression="execution(* cn.ceopen.bss..*.service..*(..))" />
          表示你要進(jìn)行事務(wù)控制的類名。詳細(xì)資料可以查下 aspectj語法。
          配置完成一定要實際測試一下,我配置過 expression="execution(* cn.ceopen.bss..*.service.*(..))" 少了一個點,導(dǎo)致事務(wù)不起作用。
          導(dǎo)致項目很長一段時間事務(wù)方面沒經(jīng)過嚴(yán)格測試。
          2.
          Spring的AOP事務(wù)管理默認(rèn)是針對unchecked exception回滾。
          也就是默認(rèn)對RuntimeException()異常極其子類進(jìn)行事務(wù)回滾。
          在項目中定義公共的RuntimeException異常,避免每個開發(fā)人員隨意拋出異常。
          不然的話沒新定義一個異常,就要修改tx:method rollback-for 太麻煩了。

          總結(jié):
          1.對事務(wù)配置進(jìn)行檢查,對復(fù)雜嵌套的事務(wù)邏輯必要的時候debug到spring源碼中確認(rèn)。
          2.定義統(tǒng)一異常類型
          3.同一個類調(diào)用自身方法,子方法的事務(wù)配置不起作用。解決方法見上一篇文章。
          http://www.aygfsteel.com/zyskm/archive/2011/11/11/363535.html

          作者: zyskm
          本文地址:
          http://www.aygfsteel.com/zyskm/archive/2011/11/30/365225.html

          posted on 2011-11-30 17:35 zyskm 閱讀(3279) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 方城县| 商城县| 青川县| 军事| 丹阳市| 泸州市| 工布江达县| 鄄城县| 宾阳县| 广西| 易门县| 高雄县| 丽江市| 泗水县| 灌南县| 黑龙江省| 黄浦区| 休宁县| 余庆县| 农安县| 桐梓县| 内江市| 泽库县| 庆安县| 修文县| 屯门区| 民丰县| 通榆县| 罗田县| 黎平县| 长寿区| 什邡市| 娄底市| 蓬安县| 江门市| 新安县| 星子县| 定南县| 沿河| 象州县| 台州市|