`

事务传播行为种类

 
阅读更多
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"
   class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory">
    <ref bean="sessionFactory" />
   </property>
</bean>

<!-- 定义事务拦截器bean-->
<bean id="transactionInterceptor"
   class="org.springframework.transaction.interceptor.TransactionInterceptor">
   <!-- 事务拦截器bean需要依赖注入一个事务管理器-->
   <property name="transactionManager" 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" class="com.zd.service.impl.Manager" parent="managerTemplate" />

<!-- 定义BeanNameAutoProxyCreator-->
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
     <!-- 指定对满足哪些bean name的bean自动生成业务代理 -->
     <property name="beanNames">
            <!-- 下面是所有需要自动创建事务代理的bean-->
            <list>
                <value>manager</value>
            </list>
            <!-- 此处可增加其他需要自动创建事务代理的bean-->
     </property>
        <!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
        <property name="interceptorNames">
            <list>
                <!-- 此处可增加其他新的Interceptor -->
                <value>transactionInterceptor</value> 
            </list>
        </property>
    </bean>

<!-- 基本数据库操作 -->
<bean id="baseDao" class="com.zd.service.impl.BaseDao">
    <property name="hibernateTemplate">
      <ref bean="hibernateTemplate"/>
    </property>
</bean>

<!-- 班级 -->
<bean id="teamDao" class="com.zd.service.impl.TeamDao">
    <property name="baseDao">
       <ref bean="baseDao" />
    </property>
</bean>

<!-- 学生 -->
<bean id="studentDao" class="com.zd.service.impl.StudentDao">
    <property name="baseDao">
       <ref bean="baseDao" />
    </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");

 

 

分享到:
评论

相关推荐

    Spring在Transaction事务传播行为种类

    ### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...

    事务传播特性了解事务的几种传播特性

    在Java应用开发中,特别是使用Spring框架时,开发者可以通过配置不同的事务传播行为来控制事务如何在方法调用之间传播。这些传播行为对于理解并正确实现业务逻辑至关重要。 #### 二、事务传播特性的种类 根据给定...

    Spring事务管理失效原因汇总

    5. 事务传播行为配置错误。比如,在需要REQUIRES_NEW传播行为的情况下配置了REQUIRED。 为了确保事务管理的有效性,开发者应该理解并正确使用@Transactional注解,合理配置事务管理的相关参数,注意异常的处理,并...

    Spring事务管理

    例如,通过`transactionAttributes`属性设置不同的事务传播行为。 - **基于注解的配置**:使用`@Transactional`注解直接在业务方法上声明事务属性,如`PROPAGATION_REQUIRED`表示必须有事务,如果没有则新建。这种...

    跟我学Spring3(9.3)Spring的事务之编程式事

    4. **事务的传播行为**:在编程式事务中,我们需要了解Spring定义的7种事务传播行为,例如PROPAGATION_REQUIRED(默认行为,如果当前存在事务,则加入到该事务;如果当前没有事务,则创建一个新的事务)、...

    分布式事务1

    总的来说,分布式事务处理是分布式系统设计中的一大挑战,需要综合考虑异常处理、事务隔离级别、事务传播行为以及各种分布式事务协议。正确理解和应用这些知识,能帮助我们构建更健壮、一致性的分布式系统。

    Java事务总结.docx

    综上所述,事务处理是数据库管理中的核心机制之一,通过合理设置事务的隔离级别和传播行为,可以有效解决并发操作带来的数据不一致问题。同时,针对分布式系统的特殊需求,还需要采用适当的事务管理技术,如JTA和两...

    SpringMVC+MyBatis 事务管理(实例)

    它可以指定事务的传播行为、隔离级别、超时时间等。 7. tx+aop方式 tx+aop方式是Spring的事务管理方式之一,它使用AOP(面向aspect编程)来实现事务管理。这种方式可以将事务管理和业务逻辑分离,提高代码的可读性...

    事务文书简报定稿.ppt

    事务文书简报的主要分类包括工作简报、会议简报和典型经验简报。工作简报通常是用来反映日常工作的动态,以及重点项目的进展情况。以科协工作情况为例,工作简报能够快速让团队成员掌握当前的工作重心和成效。会议...

    企业上网行为管理制度归纳.pdf

    为了防止员工利用上班时间处理与工作无关的私人事务,制度中明确规定网络资源主要用于工作相关活动,禁止浏览与工作无关的网页、玩游戏或观看非工作相关视频内容。此外,为了防止敏感信息的外泄,网络管理员负责监控...

    四年级垃圾分类教学设计.doc

    【知识点】 1. 四年级垃圾分类教学:这个教学...通过这样的垃圾分类教学设计,四年级的学生不仅可以学习到理论知识,还能通过实践项目深入理解和体验垃圾处理的复杂性和环保的紧迫性,从而形成良好的环保行为习惯。

    大连理工大学20春《公共关系学》在线作业2答案.docx.docx

    12. 公关活动分类:不同学者根据公关行为特性将其分为新闻代理、广告代理、公共信息和双向平衡等多种模式。 13. 艾维·李与公关历史:艾维·李是公共关系行业的先驱,创立了世界上第一家公关顾问事务所,强调真实的...

    垃圾分类校园在行动活动方案.docx

    垃圾分类虽然是个人行为,但更是社会责任。作为培养未来社会成员的校园,应当在环保教育上起到示范和引领作用,通过这些富有教育意义的活动,让学生们在实际行动中体验和理解环保的重要性,为建设更加美好的未来打下...

    Java-J2EE Job Interview

    - 事务传播行为:事务传播特性在多层系统中的应用。 6. **面向对象设计**: - 面向对象原则:单一职责原则、开闭原则等基本原则。 - 设计模式选择:根据实际需求选择合适的设计模式。 通过以上知识点的学习与...

    最新音乐作品授权合同范本事务所认证.docx

    - 包括但不限于复制权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、出版权、发表权、汇编权等所有现行著作权法规定的权利种类。 - 乙方需尊重甲方的作品署名权和保护作品...

    《新闻学概论》期末考试题(附答案).pdf

    - 宣传:传播特定观念以影响思想和引导行动的社会行为。 - 受众:大众传播媒介信息的接受者,主要包括报纸读者、广播听众和电视观众。 - 新闻体制:涉及媒介机构的归属、传播目的、管理方式和经营方式,核心是...

    Apress.Begining EJB3 Java EE 7 Edition.2013

    - 事务传播行为(Transaction Propagation)。 - 事务的隔离级别(Isolation Level)。 - 事务的回滚和补偿机制。 - **关键知识点:** - 事务的ACID属性。 - EJB中的事务管理类型(容器管理和Bean管理)。 - 事务...

    分类算法总结.docx

    关联规则分类方法,则侧重于从大量事务中发现项目之间的有趣关系,如频繁项集和强关联规则。这些规则揭示了项目之间的共现模式,对于市场篮子分析、顾客购买行为分析等有着重要意义。其代表性的算法有Apriori算法、...

    吉林省吉林市龙潭区 八年级政治上学期期中试题(无答案) 新人教版 试题.doc

    18. **违法行为分类**:一般违法行为指未达到犯罪程度的违法行为,如行为一;犯罪行为是指严重危害社会,触犯刑法的行为,如行为二。 19. **犯罪的基本特征**:犯罪的基本特征包括严重的社会危害性、刑事违法性和应...

Global site tag (gtag.js) - Google Analytics