【问题标题】:Spring : Transactions not rolling backSpring:事务不回滚
【发布时间】:2012-03-10 17:38:37
【问题描述】:

我正在尝试使用基于 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函数有任何异常,事务就会回滚。但它并没有回滚。如果我做错了什么或遗漏了什么,请指导我。

谢谢。

问候 吉拉尼

【问题讨论】:

  • 请向我们展示获取包含此方法的对象的引用并调用此方法的代码。
  • 您的数据源自动提交是否已禁用?

标签: spring jdbc transactions rollback


【解决方案1】:

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

例如带有 MyISAM 表的 MySQL 没有事务。 无论你如何在没有 Spring 的情况下配置 Spring 或原生 JDBC,或者使用 JTA 或 Hibernate,都永远无法获得 ROLLBACK。

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

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

建立联系

设置自动提交为假

插入一条记录

插入另一条记录

回滚连接

关闭连接

手动检查记录是否已插入

【讨论】:

  • 这正是我的问题。让我发疯,试图弄清楚为什么我的交易没有回滚。谢谢你的回答。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 2018-07-15
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多