当前位置: 首页 > 知识库问答 >
问题:

中断正在运行的spring mybatis事务

万俟英锐
2023-03-14

spring和mybatis是否可以中断正在执行的mybatis数据库事务?

例子:

我有一个将数千条记录插入oracle SQL数据库的应用程序。这大约需要5分钟。如果用户在插入记录时按下“停止”按钮,我希望停止数据库事务并回滚更改。

一旦数据库过程完成,我可以使用事务管理器回滚事务:

TransactionStatus status = txManager.getTransaction(def);
txManager.rollback(status)

但我无法在事务运行时中断它。

在JDBC中,我会简单地做:准备tatement.cancel()

我试图在MyBatis中获得这份准备好的声明,但我认为这是不可能的。

有人有解决这个问题的办法吗?

共有1个答案

郝哲茂
2023-03-14

我认为您可以从会话工厂获取当前会话,然后调用会话。cancelQuery(),我认为inturn使用db调用来取消查询执行。

根据hibernate文档,它是线程安全的

Hibernate会话

取消当前查询的执行。这是会话上唯一可以从另一个线程安全调用的方法

 类似资料:
  • 问题内容: 有没有办法过早中止交易?说,我已经向数据库发送了一个命令,该命令运行五分钟,四分钟后,我想中止它。 JDBC是否定义了一种向数据库发送“停止此连接上正在执行的操作”信号的方法? 问题答案: 如james所提到的,Statement.cancel()将取消正在运行的Statement的执行(选择,更新等)。JDBC文档特别指出,Statement.cancel()可安全地从另一个线程运行

  • 我正在Spring3和Hibernate3中进行产品构建,我已经更新了这个Hibernate5和Spring5。现在我可以部署应用程序了,但是当我尝试与数据库连接时,会得到“javax.persistence.TransactionRequiredException:no transaction is in progress”

  • 我有一个带有两个按钮的swing应用程序,用于运行和停止执行JSch命令。所以我有下一个方法,当我们点击开始按钮时调用: 正如你上面看到的,我们有is取消变量,它是布尔变量,当点击停止按钮时,我们将其设置为false。所以我的问题是当用户点击停止按钮和通道与会话成为断开,zgrep表达式继续工作在服务器上。我认为channel.disconnect()应该停止我在服务器上运行的所有命令,有人能建议

  • 问题内容: 我有一些任务是在Java Quartz Jobs的帮助下执行的,但是我需要在某些情况下在代码中停止某些任务。我读到这可以通过InterruptableJob完成。但是我不知道我应该怎么做? 问题答案: 您需要将您的工作写成InterruptableJob的实现。要中断此作业,您需要Scheduler的句柄,然后调用 请查看上述类的@javadoc,石英发行版也包含此示例(example

  • 问题内容: 我很难在大多数浏览器中使用此功能,但IE(甚至在IE6中也可以正常运行)和Opera除外。 Firefox可以正确分隔div,但仅打印第一页。 Chrome和Safari仅将分页符应用于最后一个div。 如何才能在所有浏览器上正常工作? HTML: 具有ID 和的div 设置为,因此显示效果很好。 我只想打印类,并使用CSS 隐藏和的其余部分。 CSS: 问题答案: 父元素不能放在它们