【问题标题】:Spring JDBC appearing to randomly rollback transactionsSpring JDBC 出现随机回滚事务
【发布时间】:2010-12-15 15:07:28
【问题描述】:

在我的 Web 应用程序测试期间,我正在检查数据库的一致性,我发现了一个奇怪的现象。

在特定时间之间,每个表中的 Id 都有一个差距。即,114 到 130 之间的每个 ID 都消失了,它们之间的间隔大约为 20 分钟。

详细地说,它具有回滚事务的外观;没有记录行,没有执行触发器,也没有记录日志。

我的应用程序中没有任何东西可以从任何表中删除数据,所以我相信 Spring 会回滚它未提交的大型事务(包含多个数据库请求)。

自动提交选项已打开,并且在此时间段内未重新启动服务器。

以前有人听说过这样的事情吗?任何帮助或建议将不胜感激...

谢谢。


编辑:

查看 Tomcat 日志,似乎服务器在正确的时间强制重新启动。 这会导致 JDBC 像这样回滚事务吗?

服务器好像无故重启了……这是Tomcat还是JDBC的bug?

【问题讨论】:

  • 一方面,开启自动提交听起来是个坏主意。但是如果你开启了自动提交,你怎么能有一个大事务来回滚呢?
  • 好问题,我不知道。谁能详细说明 Spring JDBC 是如何处理事务的?
  • 我认为这是一个单一的大交易的假设可能是错误的。鉴于重新启动,它可能是多次尝试的单个事务。导致事务回滚的任何原因都可能是内存泄漏或执行了其他最终导致重新启动的操作。
  • 可能。我一直在检查数据库活动监视器,它看起来好像 Spring 向数据库打开了一个事务,它在实际不使用时处于休眠状态。终止此事务似乎不会导致我看到的回滚。 Spring 在下一个数据库请求时重新打开事务。
  • Tomcat 没有无故重启,是什么原因造成的。

标签: java spring transactions jdbctemplate


【解决方案1】:

我认为人们普遍认为 Tomcat 的不正常关闭是导致回滚的原因。

我已经开始使用 Springs 事务管理器的不同实现,希望不会导致问题再次发生。

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    相关资源
    最近更新 更多