gpt4 book ai didi

mysql - 传播.REQUIRES_NEW 锁定

转载 作者:行者123 更新时间:2023-11-29 16:29:17 25 4
gpt4 key购买 nike

考虑一个需要很长时间的事务。在此期间,我想对 TableSmall 执行一些小更新。 ,它应该立即执行,并且主事务的回滚不应该回滚那些小的更新。

我当前的问题是这些小更新将锁定 TableSmall\直至交易完成。即使事务仍在运行,我也需要能够继续更新 TableSmall。

可以用@Transactional(propagation = Propagation.REQUIRES_NEW)来注释小更新吗?避免锁定这些小更新的行/表?

最佳答案

来自文档。

Create a new transaction, suspending the current transaction if one exists.Analogous to the EJB transaction attribute of the same name.

NOTE: Actual transaction suspension will not work out-of-the-boxon all transaction managers. This in particular applies to org.springframework.transaction.jta.JtaTransactionManager,which requires the javax.transaction.TransactionManager to bemade available it to it (which is server-specific in standard Java EE).

A PROPAGATION_REQUIRES_NEW scope always defines its owntransaction synchronizations. Existing synchronizations will be suspendedand resumed appropriately.

因此,我认为如果您仅在一个线程实例中运行这些小更新,它应该会像您期望的那样适合您。

对于小任务,还可以考虑@Transactional(propagation=NESTED)。这个link也很有趣。

我得到了锁,因为在多线程环境中,我们调用了多个此方法,然后结果是我们的所有事务都被挂起。

关于mysql - 传播.REQUIRES_NEW 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54036518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com