隨筆-109  評(píng)論-187  文章-25  trackbacks-0

          ??? <bean id="transactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

          ?????? ? abstract="true">

          ?????? <property name="transactionManager" ref="transactionManager"/>

          ?????? <property name="transactionAttributes">

          ?????????? <props>

          ????????????? <prop key="insert*">PROPAGATION_REQUIRED</prop>

          ????????????? <prop key="update*">PROPAGATION_REQUIRED</prop>

          ????????????? <prop key="delete*">PROPAGATION_REQUIRED</prop>

          ????????????? <prop key="change*">PROPAGATION_REQUIRED</prop>

          ????????????? <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

          ??? ?????? </props>

          ?????? </property>

          ??? </bean>

          1

          一旦你決定要用 AOP 來(lái)做 SERVICE 內(nèi)部每個(gè)方法的事務(wù)處理,那么在 DAO 層內(nèi)部最好不要從自己去 catch 異常,因?yàn)樵?/span> SERVICE 里面可能多次調(diào)用 DAO ,一旦多次調(diào)用,你其中一個(gè)方法捕獲了異常就沒(méi)有辦法保證事務(wù)回滾,所以即使你捕獲異常為了調(diào)試,一定要在 CATCH 方法中一定還要拋出一個(gè)異常來(lái),否則無(wú)法保證事務(wù)

          ?

          2

          一旦決定要用 spring aop 方式來(lái)處理事務(wù),一定要不采用 JDOtemplate ,或者 HIBERNATE TEMPALATE 內(nèi)部類的方式,因?yàn)槟菢铀麄冏约喝ス芾硎聞?wù),一旦在內(nèi)部類中事務(wù)回滾,無(wú)法保證其他的 DAO 中事務(wù)回滾

          ?

          3

          1、? PROPAGATION_REQUIRED -- 支持當(dāng)前的事務(wù),如果不存在就創(chuàng)建一個(gè)新的。這是最常用的選擇。
          2
          PROPAGATION_SUPPORTS -- 支持當(dāng)前的事務(wù),如果不存在就不使用事務(wù)。
          3
          PROPAGATION_MANDATORY -- 支持當(dāng)前的事務(wù),如果不存在就拋出異常。
          4
          PROPAGATION_REQUIRES_NEW -- 創(chuàng)建一個(gè)新的事務(wù),并暫停當(dāng)前的事務(wù)(如果存在)。
          5
          PROPAGATION_NOT_SUPPORTED -- 不使用事務(wù),并暫停當(dāng)前的事務(wù)(如果存在)。
          6
          PROPAGATION_NEVER -- 不使用事務(wù),如果當(dāng)前存在事務(wù)就拋出異常。
          7
          PROPAGATION_NESTED -- 如果當(dāng)前存在事務(wù)就作為嵌入事務(wù)執(zhí)行,否則與 PROPAGATION_REQUIRED 類似。

          ?

          ?

          4 < prop key="change*">PROPAGATION_REQUIRED</prop>

          ? 你可以在 PROPAGATION_REQUIRE 之后指定拋出什么樣的異常事務(wù)才回滾,或者事務(wù)的隔離方式是什么等等都可以配置如 <prop key="change*">PROPAGATION_REQUIRED,readOnly,-PetClinicException</prop>

          posted on 2006-05-17 17:37 小小程序程序員混口飯吃 閱讀(1285) 評(píng)論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 汕尾市| 皋兰县| 灌南县| 南平市| 公主岭市| 嘉义市| 梁山县| 鹿邑县| 都昌县| 和田市| 遵化市| 闽侯县| 万宁市| 望都县| 凌海市| 利津县| 绥德县| 永昌县| 台南县| 曲沃县| 赣榆县| 河曲县| 塔城市| 九龙城区| 昭苏县| 专栏| 黄陵县| 双桥区| 巴彦淖尔市| 休宁县| 高邮市| 古交市| 广元市| 黑龙江省| 易门县| 宽城| 海盐县| 大埔县| 罗甸县| 新竹县| 方山县|