Spring:交易没有回滚

时间:2012-02-20 11:08:08

标签: spring jdbc transactions rollback

我正在尝试使用基于Spring 3.0注释的事务来处理我的服务层。我正在为spring配置事务支持,如下所示:

我正在使用DataSourceTransactionManager进行交易。

<bean id="summaryDailyTXManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  

  <property name="dataSource" ref="summaryDailyDataSource"/>

</bean>

我按如下方式配置基于注释的支持:

<tx:annotation-driven transaction-manager="summaryDailyTXManager" proxy-target-class="true" />

在此之后,我使用以下注释作为我的可交易功能:

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = { Exception.class })
public void doSomething() {
// my code
}

我的理解是,如果doSomething函数有任何异常,则事务将回滚。但它并没有回滚。如果我做错了或者我错过了什么,请指导我。

感谢。

此致 吉拉尼

2 个答案:

答案 0 :(得分:4)

你的数据库是什么? 有时它是数据库问题。

MySQL与MyISAM表的实例没有交易。 无论你如何在没有Spring的情况下配置spring或native JDBC,或者使用JTA或Hibernate,你都无法获得ROLLBACK。

如果我遇到类似的问题,我会通过排除Spring来解决问题。

创建一个原生的非spring jdbc方法。

获得连接

设置自动提交错误

插入一条记录

插入另一条记录

回滚连接

关闭连接

手动检查是否已插入记录

答案 1 :(得分:0)

因为只有在默认情况下抛出runtimeException时,spring才会回滚。