2017-02-11 89 views
0

使用websphere数据源连接SQL-SERVER弹簧事务挂起(锁定)与REQUIRES_NEW或NOT_SUPPORTED播放。使用Websphere数据源使用事务挂起挂起的连接

当使用BasicDataSource或任何其他时,情况并非如此。

请帮忙。

+0

也许您从另一笔交易中收到未提交的工作。要么一次完成所有操作,要么执行另一个操作,要么更换锁。如果这没有帮助,你需要在你的问题中提供更多的细节。 –

回答

0

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

流动造成单线程死锁可能是这样的:

  • 交易开始即锁定行X
  • 调用REQUIRES_NEW方法
  • SQL命令意味着交易暂停,新的事务开始
  • 尝试锁定行X的SQL命令< - 此处的死锁

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