读书人

事宜传播行为种类

发布时间: 2012-08-25 10:06:20 作者: rapoo

事务传播行为种类
事务传播行为种类

Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:

表1事务传播行为类型

事务传播行为类型


说明

PROPAGATION_REQUIRED


如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS


支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY


使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW


新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED


以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER


以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED


如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

当使用PROPAGATION_NESTED时,底层的数据源必须基于JDBC 3.0,并且实现者需要支持保存点事务机制。

<!--Hibernate事务管理器-->
<bean id="transactionManager"
/>
</property>
</bean>

<!-- 定义事务拦截器bean-->
<bean id="transactionInterceptor"
ref="transactionManager" />
<property name="transactionAttributes">
<!-- 下面定义事务传播属性-->
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<bean id="managerTemplate" abstract="true" lazy-init="true">
<property name="teamDao">
<ref bean="teamDao" />
</property>
<property name="studentDao">
<ref bean="studentDao" />
</property>
</bean>

<bean id ="manager" parent="managerTemplate" />

<!-- 定义BeanNameAutoProxyCreator-->
<bean />
</property>
</bean>

<!-- 学生 -->
<bean id="studentDao" />
</property>
</bean>

public void testSaveTeam() {
Team team = new Team();
team.setTeamId(DBKeyCreator.getRandomKey(12));
team.setTeamName("Class CCC");
IManager manager = (IManager) SpringContextUtil.getContext().getBean("manager");


Student student = new Student();
student.setStudentId(DBKeyCreator.getRandomKey(13));
student.setSex(Student.SEX_FEMALE);
student.setStudentName("Tom");
student.setTeamId("60FHDXDIG5JQ");
manager.saveTeamAndStu(team, student);
System.out.println("Save Team and Student Success");

读书人网 >软件架构设计

热点推荐