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

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

          上一篇說明了一種spring事務配置方式,這次補上另一種。
          見配置文件:
          <!-- 事務攔截 -->
              
          <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..*(..))" />
          表示你要進行事務控制的類名。詳細資料可以查下 aspectj語法。
          配置完成一定要實際測試一下,我配置過 expression="execution(* cn.ceopen.bss..*.service.*(..))" 少了一個點,導致事務不起作用。
          導致項目很長一段時間事務方面沒經過嚴格測試。
          2.
          Spring的AOP事務管理默認是針對unchecked exception回滾。
          也就是默認對RuntimeException()異常極其子類進行事務回滾。
          在項目中定義公共的RuntimeException異常,避免每個開發人員隨意拋出異常。
          不然的話沒新定義一個異常,就要修改tx:method rollback-for 太麻煩了。

          總結:
          1.對事務配置進行檢查,對復雜嵌套的事務邏輯必要的時候debug到spring源碼中確認。
          2.定義統一異常類型
          3.同一個類調用自身方法,子方法的事務配置不起作用。解決方法見上一篇文章。
          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)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 湘潭市| 曲周县| 呼玛县| 闽侯县| 虹口区| 无棣县| 台湾省| 乌拉特中旗| 沅江市| 阳朔县| 东至县| 榆社县| 仪陇县| 南康市| 沙雅县| 南昌县| 鸡西市| 揭西县| 乐东| 镇江市| 嘉峪关市| 余干县| 铜川市| 灵寿县| 濮阳市| 盐亭县| 东光县| 郓城县| 蕉岭县| 德钦县| 泸水县| 陕西省| 汪清县| 沛县| 东丰县| 望都县| 库尔勒市| 都匀市| 佛山市| 金湖县| 应用必备|