zyskm用夢(mèng)想丈量人生,用奔跑丈量激情

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

          上一篇說(shuō)明了一種spring事務(wù)配置方式,這次補(bǔ)上另一種。
          見(jiàn)配置文件:
          <!-- 事務(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>

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

          總結(jié):
          1.對(duì)事務(wù)配置進(jìn)行檢查,對(duì)復(fù)雜嵌套的事務(wù)邏輯必要的時(shí)候debug到spring源碼中確認(rèn)。
          2.定義統(tǒng)一異常類型
          3.同一個(gè)類調(diào)用自身方法,子方法的事務(wù)配置不起作用。解決方法見(jiàn)上一篇文章。
          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 閱讀(3280) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 长治县| 雅安市| 横山县| 和静县| 随州市| 洞口县| 镇安县| 宜州市| 蒲城县| 正定县| 大英县| 安顺市| 清苑县| 肥东县| 合肥市| 灌云县| 广德县| 泽州县| 吉木萨尔县| 潼南县| 汝南县| 夏邑县| 汝州市| 霍邱县| 新竹市| 湘潭市| 河北省| 陵水| 吐鲁番市| 闵行区| 额尔古纳市| 鲁甸县| 敦化市| 宁远县| 永年县| 深圳市| 古丈县| 上犹县| 汝城县| 获嘉县| 内江市|