zoukankan      html  css  js  c++  java
  • Spring事务配置的五种方式

    Spring事务配置的五种方式
        前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。
        总结如下:
        Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。
        DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。
        具体如下图:
     
        根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:
        第一种方式:每个Bean都有一个代理
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
     
        <bean id="sessionFactory"  
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
            <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
            <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        </bean>  
     
        <!-- 定义事务管理器(声明式的事务) -->  
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
        <!-- 配置DAO -->
        <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
        <bean id="userDao"  
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
               <!-- 配置事务管理器 -->  
               <property name="transactionManager" ref="transactionManager" />     
            <property name="target" ref="userDaoTarget" />  
             <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
            <!-- 配置事务属性 -->  
            <property name="transactionAttributes">  
                <props>  
                    <prop key="*">PROPAGATION_REQUIRED</prop>
                </props>  
            </property>  
        </bean>  
    </beans>
        第二种方式:所有Bean共享一个代理基类
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
     
        <bean id="sessionFactory"  
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
            <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
            <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        </bean>  
     
        <!-- 定义事务管理器(声明式的事务) -->  
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
        <bean id="transactionBase"  
                class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  
                lazy-init="true" abstract="true">  
            <!-- 配置事务管理器 -->  
            <property name="transactionManager" ref="transactionManager" />  
            <!-- 配置事务属性 -->  
            <property name="transactionAttributes">  
                <props>  
                    <prop key="*">PROPAGATION_REQUIRED</prop>  
                </props>  
            </property>  
        </bean>    
       
        <!-- 配置DAO -->
        <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
        <bean id="userDao" parent="transactionBase" >  
            <property name="target" ref="userDaoTarget" />   
        </bean>
    </beans>
    第三种方式:使用拦截器
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
     
        <bean id="sessionFactory"  
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
            <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
            <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        </bean>  
     
        <!-- 定义事务管理器(声明式的事务) -->  
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean> 
       
        <bean id="transactionInterceptor"  
            class="org.springframework.transaction.interceptor.TransactionInterceptor">  
            <property name="transactionManager" ref="transactionManager" />  
            <!-- 配置事务属性 -->  
            <property name="transactionAttributes">  
                <props>  
                    <prop key="*">PROPAGATION_REQUIRED</prop>  
                </props>  
            </property>  
        </bean>
          
        <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
            <property name="beanNames">  
                <list>  
                    <value>*Dao</value>
                </list>  
            </property>  
            <property name="interceptorNames">  
                <list>  
                    <value>transactionInterceptor</value>  
                </list>  
            </property>  
        </bean>  
      
        <!-- 配置DAO -->
        <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
    </beans>
    第四种方式:使用tx标签配置的拦截器
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
        <context:annotation-config />
        <context:component-scan base-package="com.bluesky" />
     
        <bean id="sessionFactory"  
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
            <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
            <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        </bean>  
     
        <!-- 定义事务管理器(声明式的事务) -->  
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
     
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="*" propagation="REQUIRED" />
            </tx:attributes>
        </tx:advice>
        
        <aop:config>
            <aop:pointcut id="interceptorPointCuts"
                expression="execution(* com.bluesky.spring.dao.*.*(..))" />
            <aop:advisor advice-ref="txAdvice"
                pointcut-ref="interceptorPointCuts" />        
        </aop:config>      
    </beans>
    第五种方式:全注解
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
               http://www.springframework.org/schema/context
               http://www.springframework.org/schema/context/spring-context-2.5.xsd
               http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
               http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
        <context:annotation-config />
        <context:component-scan base-package="com.bluesky" />
     
        <tx:annotation-driven transaction-manager="transactionManager"/>
     
        <bean id="sessionFactory"  
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
            <property name="configLocation" value="classpath:hibernate.cfg.xml" />  
            <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
        </bean>  
     
        <!-- 定义事务管理器(声明式的事务) -->  
        <bean id="transactionManager"
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory" />
        </bean>
        
    </beans>
    此时在DAO上需加上@Transactional注解,如下:
    package com.bluesky.spring.dao;
     
    import java.util.List;
     
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    import org.springframework.stereotype.Component;
     
    import com.bluesky.spring.domain.User;
     
    @Transactional
    @Component("userDao")
    public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
     
        public List<User> listUsers() {
            return this.getSession().createQuery("from User").list();
        }
        
        
    }
     
     
    posted on 2009-04-05 16:38 The Matrix 阅读(92059) 评论(65)  编辑  收藏 所属分类: Spring
     
     
     
     
    ======================================================================
    评论:
    # re: Spring事务配置的五种方式 2009-04-05 19:41 | heyang
    请问第一个图是拿什么软件画的?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-04-05 19:47 | The Matrix
    @heyang
    Mindjet7.0,呵呵  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-04-06 10:13 | 虎啸龙吟
    用什么画的图啊?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-04-06 16:00 | 雨奏
    @The Matrix
    请问能否再简要说说这几种方式各自的好处与不足,或适用的场景?谢谢  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-04-06 23:00 | The Matrix
    @雨奏
    第一种方式与第二种方式是类似的,在所有方式中,第一种方式所需写的配置文件最多。
    在Spring2.0时,一般都采用方式三,主要带来的好处就是配置文件的量变小。
    在Spring2.5时,可以采用方式五,这样基本可以做到0配置了:)  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-04-08 10:53 | 雨奏
    @The Matrix
    谢谢你的耐心解答。目前我倒是常用第4种方式  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-04-17 12:50 | Woden
    我想请教一个疑问: 
    假如我采用了第四种配置方式,然后我在某一个类*.dao.Test中调用了两个对象,诸如*.dao.UserDao和*.dao.RoleDao,那么此时的事物拦截机制是怎样? 
     
    如: 
    Test中有方法: 
    execute(){ 
    userDao.insert(); 
    roleDao.insert(); 
     
    那么这个execute是否算一个事务? 
     
    望解答。多谢。  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-04-17 19:54 | The Matrix
    @Woden
    如果事务拦截机制对Test类中的execute方法生效,那么两个dao的insert方法是在一个事务,否则两个dao的insert方法就不在一个事务中。  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-05-01 10:36 | 心梦帆影
    不错的文章,收藏了。有一个问题想请教你: 
    第五种方式中,如果UserDaoImpl类中有很多方法,但不是全部方法都加上事务,那应怎么处理?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-05-01 21:28 | The Matrix
    @心梦帆影
    没有测试,但我想是否可以只在方法上加@Transactional注解
     
    最近太忙了,要同时面临好几件事情,兄弟有测试结果,可以告知我一下,呵呵  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2009-09-02 11:25 | bruce
    收藏了,不错,慢慢研究  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-09-02 21:42 | xxwinnie
    收藏~ 慢慢消化~  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-09-04 09:43 | wuspace
    如果使用了多个数据源的话,@Transactional到底哪个数据源的事务?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-09-22 17:53 | soonj
    辛苦楼主。很有奉献精神,学习!!  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-12-20 14:20 | oyp
    非常感谢,来得及时,  回复  更多评论
      
    # re: Spring事务配置的五种方式 2009-12-30 13:59 | zhangleipd
    文章很好,感谢楼主奉献精神  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2010-01-20 20:05 | nassir
    确实写得很不错  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-01-22 17:25 | pecal
    bz的文章写的不错,请问可以转载吗? 会写转载地址的  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2010-03-18 15:49 | wasw100
    很详细,以前只知其然,不知其所以然,现在明白点了,以后再细看  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-03-23 14:39 | Matt
    谢谢楼主的分享。  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-04-08 13:43 | phe441
    觉得第三、四种比较方便,好用  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-04-15 13:37 | 隔叶黄莺
    我一般用第五种,借问一下楼主,我在使用第五种的时候报错了,错误是: 
    Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personDao' defined in file [E:\workspace\TestSpring\bin\com\unmi\dao\impl\PersonDaoImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1403) 
    。.. more 
     
    不知道是什么原因,要如何解决呢?  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2010-07-21 10:28 | Teddy
    很好的总结,感谢楼主!  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-08-19 11:09 | limj
    我们现在用的是第五种方式吗? 
    第五种的第一部分 <!-- 定义事务管理器(声明式的事务) --> 是需要自己写的吗?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-08-31 09:21 | 周龙
    使用第五种方式在spring3.X hibernate3.X下@Transactional不能工作,是jar包冲突还是?(springsource 文档貌似有说过不能保证@Transactional都有效)  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-09-15 10:00 | sdf
    @heyang 
    用铅笔画的  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-09-19 11:30 | java程序员
    好文章,学习了,  回复  更多评论
      
    # re: Spring事务配置的五种方式 2010-12-30 15:10 | aguai0
    说的好,不如做的好!  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-03-01 17:10 | hc
    bluesky?莫非是hx的  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-03-16 14:52 | 谢彧
    学习啦  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-03-16 16:03 | easy518网址导航
    我听着陈瑞的歌曲,看完上面文章,很高效率的看完了。 
    人要有点坚持啊,不能三心二意啊。 
     
    咎由自取——–日本大地震的真正原因!!! 
    http://www.easy518.com/bbs/?p=90  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-03-17 17:56 | 阿斯顿发
    最好的配置当然是第4种tx配置。  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-04-28 11:59 | easy518
    android学习群:118615483,flex群:47964236 
      回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-04-28 12:36 | easy518网址导航
    http://www.easy518.com  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-05-26 17:03 | joynet007
    请问第五种方式你确定你的可以么?我的怎么不行呢!我也是按照你的方法配置的啊!?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-05-27 11:48 | sunyi
    @joynet007 
    还要加上这句话。 
    <tx:annotation-driven transaction-manager="transactionManager" />  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2011-08-17 11:43 | a
    你怎么把@Transactional 
    写在类上了?不是写在方法上吗?  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2011-08-22 13:26 | rick
    正在学习,很好总结 tks LZ 
      回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-10-21 12:45 | Jeelon
    LZ 我用的你写的第二种 可以麻烦你看看我的这个错误么? 
    这是地址问题都在里面了: 
    http://topic.csdn.net/u/20111020/22/58f0865c-44b0-4aff-8c9a-59edaab3c7f2.html 
     
    感激不尽哦!  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-11-03 14:28 | xiaohaiben007
    真不错。。。。感谢。。。  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-11-03 18:37 | tian012
    @xiaohaiben007 
    牛人,非常感谢  回复  更多评论
      
    # re: Spring事务配置的五种方式 2011-11-03 18:39 | tian012
    牛人,非常感谢   回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2011-11-05 15:10 | xx
    强  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2011-11-07 15:17 | 啊啊
    犀利,困惑我2天的东西,被你点通了  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-02-15 21:05 | laifu901
    哥  回复  更多评论
      
    # re: Spring事务配置的第五种方式 2012-02-23 15:33 | qch
    第五种方式 我试了试 在3.0下面,不德行  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-05-21 11:13 | free8rt
    @Transactional加在方法上就可以给某个方法加上事物了,比如增删改,加在service类上就是给所有方法都加上事物了  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-08-09 18:47 | yushan
    很不错,顶一个  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-09-03 11:47 | 北京青年
    强大  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-10-16 14:23 | webtomos
    @heyang思维导图  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-11-29 09:51 | zeda
    肯定是用第五种啦 呵呵 不过只是基于java5才能用  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-12-04 10:21 | jianxia612
    你这个有jdbctemplate的示例程序?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-12-04 11:22 | jianxia612
    楼主 你的第二种配置方式 <!-- 配置DAO -->
    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>
     
    <bean id="userDao" parent="transactionBase" > 
    <property name="target" ref="userDaoTarget" /> 
    </bean> 能否提供一下spring jdbctemplate方式配置呢  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-12-04 11:30 | jianxia612
    还一个问题比较疑虑 userDao之中的name是自己可以随意命名的吧 你看我的jdbc配置如下 <bean id="taskServer" parent="transactionBase" class="com.abc.DataGatherTaskServer">
    <property name="taskDao" >
    <ref bean="TaskDao" />
    </property> 
    </bean> 其中transactionBase 在启动tomcat会出错!nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'transactionManager' of bean class [com.abc.TaskServer]: Bean property 'transactionManager' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 此处错误是我在dao之中为get,set 'transactionManager' ?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2012-12-04 15:25 | jianxia612
    @jianxia612
    针对第二种已经找到设置方法:<bean id="taskServer" parent="transactionBase" >
    <property name="target">
    <bean class="com.abc.server.TaskServer">
    <property name="taskDao" ref="taskDao"/>
    </bean> 
    </property> 
    </bean>  回复  更多评论
      
    # re: Spring事务配置的五种方式 2013-02-03 11:48 | vicky
    挺细致的  回复  更多评论
      
    # re: Spring事务配置的五种方式 2013-03-01 22:44 | ZL
    很有用,非常感谢!  回复  更多评论
      
    # re: Spring事务配置的五种方式 2013-05-03 10:13 | 高寒
    博主讲的意思是对的,但是事务一般是不能加到dao层的,应该加到service层,还有就是,博主没有写出来,rollbackfor与noRollbackfor等等  回复  更多评论
      
    # re: Spring事务配置的五种方式 2013-05-05 17:17 | 赵靖
    楼主,请问楼主,个人感觉第四种方式只要是把规则配置好了,其他需要使用事务的类,方法,就不用做多余的配置了,第五种方法是全注解,每个需要做事务处理的方法都需要手动配置注解,是不是第四种方法比第五种方法更好?  回复  更多评论
      
    # re: Spring事务配置的五种方式 2013-05-31 00:17 | jzp
    讲解的很好,非常感谢!!  回复  更多评论
      
    # re: Spring事务配置的五种方式 2013-06-22 22:35 | chen jq
    非常感谢分享  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2013-07-07 21:52 | Terry
    想在业务层service中做个事务,一个service调用多个dao时,如果有一个dao出错,其他全部回滚。采用第三种方法可以实现吗,要怎么配置?  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2013-07-19 15:14 | a
    a  回复  更多评论
      
    # re: Spring事务配置的五种方式[未登录] 2013-07-19 15:14 | a
    aa  回复  更多评论
      
  • 相关阅读:
    第10组 Beta冲刺(4/4)
    第10组 Beta冲刺(3/4)
    第10组 Beta冲刺(2/4)
    第10组 Beta冲刺(1/4)
    第10组 Alpha冲刺(4/4)
    租房这件事
    idea中的maven工程,有的项目名称显示粗体,有的显示中括号
    win10电脑版微信数字输入的间隔变大解决办法
    在实体类中添加了@ApiModel不起作用
    为数字字符串加上千分位符号
  • 原文地址:https://www.cnblogs.com/huapox/p/3251482.html
Copyright © 2011-2022 走看看