【问题标题】:Interrupting a running spring mybatis transaction中断正在运行的spring mybatis事​​务
【发布时间】:2012-07-03 18:50:40
【问题描述】:

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

例子:

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

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

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

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

在 JDBC 中我只需要:PreparedStatement.cancel()

我曾尝试在 MyBatis 中获取此 PreparedStatement,但我认为不可能。

有没有人能解决这个问题?

【问题讨论】:

  • 我也找不到这样做的方法。这将是一个很好的增强。

标签: spring transactions interrupt mybatis spring-transactions


【解决方案1】:

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

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

hibernate session

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

【讨论】:

  • 我在我的项目中使用 myBatis 而不是 Hibernate,但无论如何感谢您的帮助
  • 我没有使用过myBatis,但我认为您仍然可以通过获取当前打开的连接/会话然后按方面取消查询来使用此解决方案。
猜你喜欢
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多