你能纠正我是如何运作的吗?用事务注释标记的方法。数据库事务是否被截断时打开并提交了spring事务。此类方法未完成时,DB中的所有关联资源也会保持锁定状态。 例如,在事务方法中,我从DB获得了一些实体,然后多次更新或删除其中的一些实体。这一切都发生在spring事务中,而DB事务只发生在事务方法结束时必要的锁定???如果该方法将挂起(例如死锁),锁定的资源是否会为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但这不应该发生!因此,当我看到一些事务方法挂起,但资源保持锁定时,这导致其他或下一个事务停止,等待锁定的资源,并且所有系统在某个时刻停止工作...
答案 0 :(得分:1)
这一切都与春天无关,这是“正常”的交易。
交易的确切含义,很大程度上取决于您使用的transaction isolation level。
如果“你”输入了一个使用@Transactional
进行了授权的方法,则会在数据库级别启动它(或者至少在执行下一个sql语句时)。当您离开该方法时,将提交该事务。
@Transactional
注释有一个参数来控制当前线程的所有事务已经完成时应该做什么。