使用事务暂停与Websphere数据源挂起连接

时间:2017-02-11 14:04:36

标签: sql-server websphere datasource spring-transactions

使用websphere数据源连接SQL-SERVER spring事务时,将REQUIRES_NEW或NOT_SUPPORTED传播挂起(锁定)。

使用BasicDataSource或其他任何内容时都不是这种情况。

请帮忙。

1 个答案:

答案 0 :(得分:0)

REQUIRES_NEW和NOT_SUPPORTED都是阻止在当前事务中运行操作的事务属性(将暂停然后再恢复)。 WebSphere Application Server数据源知道容器管理的事务,并将在其中登记。我不确定BasicDataSource是什么,但如果它不知道容器事务,那可以解释为什么你会看到行为上的差异。

导致单线程死锁的流程可能是这样的:

  • 交易开始
  • 锁定第X行的SQL命令
  • 调用REQUIRES_NEW方法
  • 表示事务暂停,新事务开始
  • 尝试锁定行X< - deadlock here
  • 的SQL命令

如果这是您所看到的,它按照设计按规格运行,如果您希望操作在同一事务中运行,则应考虑使用不同的事务属性,例如SUPPORTS。