• PROPAGATION_REQUIRED


    PROPAGATION_REQUIRED

      (2009-05-13 13:26:52)
     

    事务传播行为种类

    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");

  • 相关阅读:
    IM的扫码登录功能如何实现?一文搞懂主流的扫码登录技术原理
    IM“扫一扫”功能很好做?看看微信“扫一扫识物”的完整技术实现
    2020年了,Android后台保活还有戏吗?看我如何优雅的实现!
    P2P技术详解(三):P2P中的NAT穿越(打洞)方案详解(进阶分析篇)
    微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结
    史上最通俗,彻底搞懂字符乱码问题的本质
    你知道,HTTPS用的是对称加密还是非对称加密?
    IM开发基础知识补课(七):主流移动端账号登录方式的原理及设计思路
    面视必备,史上最通俗计算机网络分层详解
    阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处
  • 原文地址:https://www.cnblogs.com/james1207/p/3318126.html
Copyright © 2020-2023  润新知