<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>
posted on 2006-05-17 17:37
小小程序程序员混口饭吃 阅读(1281)
评论(0) 编辑 收藏 所属分类:
java