2

你能纠正我它是如何工作的吗?用事务注释标记的方法。数据库事务在被拦截时是否与 spring 事务一起打开和提交。在这种方法未完成时,数据库中的所有相关资源也会保持锁定状态。例如,在事务方法中,我从数据库中获取了一些实体,然后多次更新或删除了其中的一些。这一切都发生在 spring 事务中,而 DB 事务仅发生在带有必要锁的事务方法结束时???如果方法会挂起,例如死锁,锁定的资源是否会为数据库中的其他资源保持锁定状态?如我所见是的..

DB (postgresql) state:

30179 | username  | 00:23:05.688157 | IDLE in transaction
6739  | username  | 00:23:13.02717  | IDLE in transaction                
6748  | username  | 00:23:15.266922 | IDLE in transaction
25595 | username  | 00:23:22.382349 | IDLE in transaction
25595 | username  | 00:23:22.382349 | IDLE in transaction 

他们都持有锁(23、21、20、5、6)。这怎么可能发生?我没有长时间的手术。只有死锁 :D 但这不应该发生!所以当我看到一些事务方法挂起,但资源保持锁定,这导致其他或下一个事务停止,等待锁定的资源和所有系统在某个时刻停止工作......

4

1 回答 1

1

这一切都与春天无关,这是“正常”的交易。

事务的确切含义在很大程度上取决于您使用的事务隔离级别

如果“您”输入了一个用 注释的方法@Transactional,则它启动了一个 DB 级别的事务(或者至少在执行下一个 sql 语句的情况下)。当您离开该方法时,事务被提交。

注释有一个参数来控制如果@Transactional当前线程已经有事务应该做什么

于 2012-01-05T10:53:03.803 回答