浏览 3237 次
锁定老帖子 主题:Spring 事务管理,请指教
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-24
我最近要做框架设计, 在对框架进行分析的时候,被 Spring的事务管理机制给迷惑了, 请对Spring的事务管理 熟悉的人给与帮助, 恳请指教; 谢谢 另外,在网络中看到的关于 Spring的事务管理,都是从Spring的帮助文档中照搬的东西,毫无意义,我想结合实际如果能够给与帮助提示是最好不过的了, 针对Spring的 编程式和声明式,两种事务管理方式 我一直在线,谢谢大家的帮助 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-24
请高手留言,帮我看一下Spring 在管理事务的问题,
我这里有一个系统,是用 Struts+Spring+JDBC 写的,但是关于事务处理这一块,我没有搞明白,希望 高手进来,一同探讨 谢谢大家 |
|
返回顶楼 | |
发表时间:2007-07-24
今天看了两篇Spring事务处理的文章,收获不少,希望大家能够在此帖中多交流,感谢关注
|
|
返回顶楼 | |
发表时间:2007-07-26
我来试着帮你回答:
先看看这个配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="url"> <value>jdbc:oracle:thin:@localhost:1521:qqwjz</value> </property> <property name="username"> <value>wjz</value> </property> <property name="password"> <value>wjz</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource"/> </property> <property name="mappingResources"> <list> <value>com/wjz/po/Father.hbm.xml</value> <value>com/wjz/po/KwmisSubject.hbm.xml</value> </list> </property> </bean> <bean id="testServer" class="com.wjz.service.impl.TestServerImpl"> <property name="testDao"> <bean id="testDao" class="com.wjz.dao.impl.TestDaoImpl"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> </property> <property name="kwmisSubjectDao"> <bean id="kwmisSubjectDao" class="com.wjz.dao.impl.KwmisSubjectDaoImp"> <property name="sessionFactory"> <ref local="sessionFactory"/> </property> </bean> </property> </bean> <bean id="testSpringService" parent="txProxyTemplate"> <property name="target"> <ref local="testServer"/> </property> </bean> <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="myTransactionManager" /> </property> <property name="transactionAttributes"> <props> <prop key="find*">PROPAGATION_REQUIRED, readOnly</prop> <prop key="get*">PROPAGATION_REQUIRED, readOnly</prop> <prop key="*">PROPAGATION_REQUIRED,-Exception</prop> </props> </property> </bean> </beans> 我使用的是Strut+Spring+Hibernate框架,事务管理的数据库连接是Session。你用的是JDBC,配置方面不同,但大同小异 <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> 把这个事务管理器换成JDBC方式即可。其他的地方都不变。 我想强调的是 <prop key="*">PROPAGATION_REQUIRED[b],-Exception[/b] Spring中对异常回滚,默认是在抛出运行时异常时才回滚,对非运行时异常无回滚。这里使用了-Exception,意思是对所以的异常(运行时,非运行时)异常都回滚。 另外要想用Spring的事务管理机制,就需要把数据库的连接交给Spring来管理,(JDBC,SESSION道理一样),如果使用Hibernate框架,要把Session交给Spring管理。在整个Service方法调用中,虽然Sevice调用了多个Dao,但是整个过程中Session只有一个。也就是说你对数据库的DML操作,都会先保存在这个Session中,包括update,insert,delete。当发生异常(这个异常可以时数据库的,也可以时程序的),Spring会把这个Session中对应的DML操作回滚。切记在Service中只有一个Session。否则无法回滚。 这是我在使用Spring事务管理机制时候印象很深的地方。虽然没有说的很全,我相信会给你一些帮助的。 要是有问题,可以和我联系QQ:545585662。我们一起研究 |
|
返回顶楼 | |
发表时间:2007-07-30
TO:qqwjz
很高兴认识你啊,老兄,看了一下你的讲解,可是,我工作时间无法上qq的,我们公司管理比较严格,能不能给我msn的联系方式; 我的msn:roundlight@hotmail.com 希望能和你交流, 加我的时候注上 qqwjz ,谢谢帮助! |
|
返回顶楼 | |
发表时间:2007-07-31
TO: qqwjz
老兄,怎么没有加我呢? 我确实无法登陆qq,有时间加我,等待和你交流阿 |
|
返回顶楼 | |
发表时间:2007-08-09
spring 事务管理,提出的实际比较早,但是最近在忙框架整合的工作,所以就放下了,没有继续;
进行经过了实例进行测试,终于了重大突破,发现Spring框架的事务管理能力,真是不错, 今天也终于进行了实际的验证测试; 收获多于付出阿,哈哈 |
|
返回顶楼 | |