Spring事务配置的五种方式

http://www.blogjava.net/robbie/archive/2009/04/05/264003.html


前段时间对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();
    }
    
    
}


评论:

#  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事务管理的小项目,包括写不成功回滚异常的,谢谢了。   回复   更多评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值