Java蜘蛛人 欢迎大家

欢迎大家 来到我的blog , 如果我身边的朋友 有什么不懂可以直接来问我 我会细心的帮助你的. 如果网络上的朋友有什么不懂的 可以加我Java蜘蛛人 QQ48187537
posts - 54, comments - 192, trackbacks - 0, articles - 1
 

    <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 来做 SERVICE 内部每个方法的事务处理,那么在 DAO 层内部最好不要从自己去 catch 异常,因为在 SERVICE 里面可能多次调用 DAO ,一旦多次调用,你其中一个方法捕获了异常就没有办法保证事务回滚,所以即使你捕获异常为了调试,一定要在 CATCH 方法中一定还要抛出一个异常来,否则无法保证事务

2

一旦决定要用 spring aop 方式来处理事务,一定要不采用 JDOtemplate ,或者 HIBERNATE TEMPALATE 内部类的方式,因为那样他们自己去管理事务,一旦在内部类中事务回滚,无法保证其他的 DAO 中事务回滚

3

1、 PROPAGATION_REQUIRED -- 支持当前的事务,如果不存在就创建一个新的。这是最常用的选择。
2 PROPAGATION_SUPPORTS -- 支持当前的事务,如果不存在就不使用事务。
3 PROPAGATION_MANDATORY -- 支持当前的事务,如果不存在就抛出异常。
4 PROPAGATION_REQUIRES_NEW -- 创建一个新的事务,并暂停当前的事务(如果存在)。
5 PROPAGATION_NOT_SUPPORTED -- 不使用事务,并暂停当前的事务(如果存在)。
6 PROPAGATION_NEVER -- 不使用事务,如果当前存在事务就抛出异常。
7 PROPAGATION_NESTED -- 如果当前存在事务就作为嵌入事务执行,否则与 PROPAGATION_REQUIRED 类似。

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

  你可以在 PROPAGATION_REQUIRE 之后指定抛出什么样的异常事务才回滚,或者事务的隔离方式是什么等等都可以配置如 <prop key="change*">PROPAGATION_REQUIRED,readOnly,-PetClinicException</prop>


只有注册用户登录后才能发表评论。


网站导航: