您的位置:首页 > 编程语言 > Java开发

借助 Spring AOP 进行事务管理之一

2009-07-09 22:49 330 查看
当使用 spring 的 AOP 为 web 应用提供事务管理服务时,我们需要指定事务策略,指定事务策略的格式如下:

传播行为, 隔离层级, 只读, +异常, -异常
传播行为必须设置,其他均可选择性地设置,中间以英文逗号分隔,例如:PROPAGATION_REQUIRED,readOnly,-BusinessException, 注意:在 BusinessException 前面加上 - 号表示发生指定异常时回滚操作,如果加上 + 号则表示发生指定异常时立即提交操作。
如果你没有指定发生异常时事务该怎样进行,那么当真的在某个事务中发生很严重的异常时它不会回滚事务的。而这不是我们期望看到的,所以在这里应该指定你的应用异常(即业务逻辑异常)。

下面结合一个实例来总结一下指定事务策略时需要注意的问题。这个实例模拟一个 HR 系统中非常简单的一部分业务逻辑--新建一个员工信息的同时为其新建一个系统用户。

服务层的代码:

声明式事务的配置如下:

<bean id="transactionInterceptor"
2 class="org.springframework.transaction.interceptor.TransactionInterceptor">
3 <property name="transactionManager">
4 <ref bean="transactionManager" />
5 </property>
6 <property name="transactionAttributes">
7 <props>
8 <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
9 <prop key="create*">PROPAGATION_REQUIRED,-Exception</prop>
10 <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
11 <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
12 <prop key="*update*">PROPAGATION_REQUIRED,-Exception</prop>
13 <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
14 </props>
15 </property>
16 </bean>
17 <bean
18 class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
19 <property name="interceptorNames">
20 <list>
21 <value>transactionInterceptor</value>
22 </list>
23 </property>
24 <property name="beanNames">
25 <value>*Service</value>
26 </property>
27 </bean>

也就是说,我们准备在服务层进行事务控制,并希望将新建员工、新建用户这两个原子性的操作作为一个完整的事务执行。在这里有两个重要的因素影响着它们能否作为一个完整的事务而执行。下面我以一个表格的形式展示我的测试结果:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: