`
lee79
  • 浏览: 106075 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring事务传播行为种类

阅读更多

事务传播行为种类

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框架提供了丰富的事务管理功能,其中包括了事务传播行为...

    Spring事务管理失效原因汇总

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

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

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

    Spring事务管理

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

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

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

    Spring.html

    传播行为:A--&gt;B,在B上声明是否一定需要事务管理 requerd:必须的(默认),如果A有事务那么就加入A的事务,如果A没有事务那么单独创建一个事务 supports,如果A有事务则加入,如果没有就算了 隔离级别 default:...

    CSDN最全面JavaEE面试题(Spring,SpringMVC,Hibernate,Mybatis)

    - Spring事务管理:了解编程式和声明式事务,事务的隔离级别和传播行为。 - SpringBoot和SpringCloud:快速开发特性,微服务架构中的作用。 **SpringMVC框架**: - SpringMVC的工作流程,DispatcherServlet的作用。...

    分布式事务1

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

    SpringMVC+MyBatis 事务管理(实例)

    1. Spring事务管理的分类 Spring事务管理可以分为两种情况:编程式事务和声明式事务。其中,声明式事务又包括基于注解@Transactional和tx+aop的方式。 2. 编程式事务管理 编程式事务管理使用TransactionTemplate...

    Spring学习资料

    第四章 Spring MVC.........................................................................................................554.1 Spring MVC 概述............................................................

    java程序员面试大纲错过了金三银四你还要错过2018吗.docx

    9. **Spring事务传播行为**:定义了事务在遇到嵌套事务时的行为,如`REQUIRED`、`REQUIRES_NEW`等。 10. **Spring设计模式**:使用了大量的设计模式,如工厂模式、代理模式、观察者模式等。 11. **Spring MVC的工作...

    基于Springboot的学生读书笔记共享系统源码数据库.zip

    - Spring:作为基础的依赖注入框架,管理整个应用的bean,提供事务管理等功能。 - SpringMVC:Spring的Web模块,负责处理HTTP请求和响应,提供模型-视图-控制器(MVC)架构模式。 - MyBatis:持久层框架,简化了...

    java 面试宝典,集合了市面上的java面试的各环节难题

    - **事务管理**:理解Spring的事务传播行为和事务回滚规则。 这些只是Java面试中可能涉及的部分核心知识点,实际的面试可能会更深入地讨论到这些话题,甚至扩展到其他相关领域,如数据库操作、微服务、分布式系统...

    毕业论文ssm166校园资讯推荐系统+jsp论文.doc

    系统通过收集、整理和分析用户行为,实现个性化资讯推送,提升信息传播效率。系统设计时需考虑用户界面的友好性和操作的简便性,同时确保数据安全。 【需求分析】 在系统开发初期,需求分析是非常关键的步骤。它...

    远程教育系统 三大框架实现 java

    此外,Spring的AOP功能可以方便地实现日志记录、事务管理等功能,确保系统运行的可靠性和安全性。 其次,Hibernate作为持久层框架,负责处理数据库操作。在远程教育系统中,Hibernate可以方便地映射Java对象到...

    基于SSH的企业级新闻系统源码.zip

    在这个新闻系统中,Spring管理所有Bean的生命周期,包括数据库连接、事务管理、业务服务对象等。通过Spring的IoC(Inversion of Control)容器,可以方便地装配和管理组件,实现松耦合。 3. **Hibernate框架**: ...

    20届同学大厂社招面经(字节阿里虾皮滴滴offer).docx

    - **事务传播特性**:定义事务的开始与结束逻辑。 以上知识点涵盖了面试中涉及到的主要技术领域,包括但不限于微服务、数据库、缓存、消息队列、搜索框架、服务注册中心、Java并发编程、JVM调优、MySQL事务隔离级别...

Global site tag (gtag.js) - Google Analytics