浏览 5980 次
锁定老帖子 主题:SPRING事务回滚问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-10
配置文件 <?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>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/zhangchiex</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>password</value> </property> </bean> <!-- The dataSource --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <!-- 事物管理器,这里是JDBC事务管理器 --> <bean id="ticketServiceTarget" class="sty.serviceImpl.TicketServiceImpl"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean><!-- 事务代理的目标 --> <bean id="ticketService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="proxyInterfaces"> <list> <value>sty.service.TicketService</value> </list> </property> <property name="target"> <ref bean="ticketServiceTarget" /> </property> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="transactionAttributes"> <props> <prop key="insert">PROPAGATION_REQUIRED,-Exception</prop> </props> </property> </bean> </beans> 下面是目标类的代码: package sty.serviceImpl; public class TicketServiceImpl implements TicketService { private DataSource dataSource; public DataSource getDataSource() { return dataSource; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void insert() { boolean flag = true; try { JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.update("insert into user value(2,'yuna','032012')"); if(flag) { throw new Exception("my exception");//抛出异常 } System.out.println("over"); } catch (Exception e) { System.out.println("exception"); e.printStackTrace(); } } } 知道的告诉下谢谢 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-10
没有抛出异常,怎么回滚呢?
LZ你看看你的insert方法没有抛出任何异常啊 |
|
返回顶楼 | |
发表时间:2008-04-10
找了好久发现原因了,也谢谢楼上指教,确实是自己没有将异常从insert方法中抛出,而是在insert方法内部处理掉了,所以导致事务无法回滚,也不知道我理解的对不,不过我将异常从insert方法抛出后就正确回滚了,搞了好几天了,今天能开心的回去吃晚饭 哈哈
|
|
返回顶楼 | |
发表时间:2008-04-10
<prop key="insert">PROPAGATION_REQUIRED,-Exception</prop>
意思就是如果insert方法抛出Exception异常的子类,就回滚 |
|
返回顶楼 | |
发表时间:2008-04-10
我觉得既然用JdbcTemplate了,应该继承JdbcDaoSupport,我都是这么做的,不知大家的意见如何
|
|
返回顶楼 | |
发表时间:2008-04-10
同意。继承JdbcDaoSupport,会使事情变的更简单一些
|
|
返回顶楼 | |
发表时间:2008-10-30
我也碰到同样的问题了,一直想不出是为什么,我的配置文件是这样写的,见下,我想在不使用事务的条件下应该就不存在事务回滚了,到是没有试过像你那样直接抛出异常,而且我的程序里只要是访问数据的地方都会回滚。但是查询是可以出结果,更新和插入就不会成功,想不出为什么,
<?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.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>jdbc/sysdb</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="mappingResources"> <list> <value> com/sunyard/ispt/model/TableNotice.hbm.xml </value> <value> com/sunyard/ispt/model/TableMaterial.hbm.xml </value> <value> com/sunyard/ispt/model/TableQuestion.hbm.xml </value> <value>com/sunyard/ispt/model/TableRule.hbm.xml </value> <value>com/sunyard/ispt/model/TablePaper.hbm.xml</value> <value> com/sunyard/ispt/model/TableResult.hbm.xml </value> <value> com/sunyard/ispt/model/TableConfig.hbm.xml </value> <value>com/sunyard/ispt/model/TablePower.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.SQLServerDialect </prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.query.factory_class"> org.hibernate.hql.classic.ClassicQueryTranslatorFactory </prop> </props> </property> </bean> <!-- 配置使用Hibernate局部事务策略 --> <bean id="transactionManger" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 配置一个事务拦截器 --> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事务拦截器Bean需要依赖注入一个事务管理器 --> <property name="transactionManager" ref="transactionManger"></property> <property name="transactionAttributes"> <!-- 下面定义事务传播属性 --> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> </beans> |
|
返回顶楼 | |