隨筆-75  評論-193  文章-5  trackbacks-0

              前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。

              總結如下:

              Spring配置文件中關于事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。

              DataSource、TransactionManager這兩部分只是會根據數據訪問方式有所變化,比如使用Hibernate進行數據訪問時,DataSource實際為SessionFactory,TransactionManager的實現為HibernateTransactionManager。

              具體如下圖:

          Spring事務配置 (2)

              根據代理機制的不同,總結了五種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 閱讀(332566) 評論(85)  編輯  收藏 所屬分類: 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網址導航
          # 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  回復  更多評論
            
          # re: Spring事務配置的五種方式[未登錄] 2013-09-02 15:20 | guoguo
          我使用的是第四種方式,沒有用hibernate,其他配置的都一樣,事務還是沒控制住,請問這可能是什么原因呢?  回復  更多評論
            
          # re: Spring事務配置的五種方式 2013-09-05 09:24 | liangtu33
          @guoguo
          很有可能是其他xml文件干擾了。  回復  更多評論
            
          # re: Spring事務配置的五種方式 2013-09-05 09:46 | liangtu33
          第一種方式中<property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />

          GeneratorDao是接口嗎?

          你是不是沒有service層,直接在dao層加的事務?  回復  更多評論
            
          # re: Spring事務配置的五種方式[未登錄] 2013-12-05 17:15 | Ray
          確實是可以在方法上加這個注解的@The Matrix
            回復  更多評論
            
          # re: Spring事務配置的五種方式 2013-12-06 18:09 | 落葉飛星
          @周龍
          我也是用地五種配置,事物也不起作用,請賜教  回復  更多評論
            
          # re: Spring事務配置的五種方式 2013-12-06 18:10 | 落葉飛星
          @sunyi
          我都是按照上面的配置做的配置,但事物不起作用  回復  更多評論
            
          # re: Spring事務配置的五種方式 2014-01-07 14:47 | aluomaidi
          @落葉飛星還需要加事務注解支持<tx:annotation-driven transaction-manager="transactionManager" />
            回復  更多評論
            
          # re: Spring事務配置的五種方式 2014-01-23 15:25 | ss
          ssss  回復  更多評論
            
          # re: Spring事務配置的五種方式 2014-05-04 14:56 | winson
          得分析下這幾種方式的工作原理和優缺點啊。  回復  更多評論
            
          # re: Spring事務配置的五種方式 2014-05-05 16:53 | 姚娜
          @The Matrix
          可以的  回復  更多評論
            
          # re: Spring事務配置的五種方式 2014-05-09 23:04 | zuidaima
          # re: Spring事務配置的五種方式 2014-05-12 10:35 | jialy
          不錯的文章!  回復  更多評論
            
          # re: Spring事務配置的五種方式 2014-05-21 10:58 | sdfa
          怎么收藏啊  回復  更多評論
            
          # re: Spring事務配置的五種方式 2014-06-06 14:26 | 風起云追
          @Terry
          遇到同樣的問題,有沒有解決?  回復  更多評論
            
          # re: Spring事務配置的五種方式 2015-01-28 11:48 | qu
          樓上說的按照上面的配置做的配置,但事物不起作用,原因如下:
          <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
          <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
          <property name="url" value="jdbc:mysql://localhost:3306/db?characterEncoding=utf8"/>
          <property name="defaultAutoCommit" value="false"/>
          </bean>

          要設置dataSource 的自動提交為false,讓spring 去管理提交,自動提交默認是true  回復  更多評論
            
          # re: Spring事務配置的五種方式 2015-04-08 16:03 | Queena
          樓主你好,能不能分享一個aop事務管理的小項目,包括寫不成功回滾異常的,謝謝了。  回復  更多評論
            
          # re: Spring事務配置的五種方式 2015-08-24 13:55 | asd
          deqw  回復  更多評論
            
          # re: Spring事務配置的五種方式 2015-12-17 16:31 | thank
          多個更新語句執行時,有一個沒有更新成功,但是不報錯,我如何手動控制讓其他的回滾呢。  回復  更多評論
            
          # re: Spring事務配置的五種方式 2016-04-14 11:10 | sl
          connection is closed 該怎么改?  回復  更多評論
            
          # re: Spring事務配置的五種方式[未登錄] 2016-07-08 09:51 | c
          第四種方法,應該在service上加事務吧,不應該加在dao層吧  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 石楼县| 浠水县| 淳安县| 桂平市| 河池市| 舞阳县| 盘锦市| 全州县| 石河子市| 梁山县| 周至县| 清河县| 武平县| 修武县| 榆林市| 晋州市| 怀仁县| 灵寿县| 鄂伦春自治旗| 堆龙德庆县| 二手房| 海淀区| 昂仁县| 永德县| 兴业县| 梅河口市| 荆州市| 界首市| 剑河县| 灵山县| 建瓯市| 镇坪县| 遂川县| 安康市| 高青县| 平昌县| 玉屏| 鱼台县| 邛崃市| 紫阳县| 南京市|