考虑一个事务,这需要很长时间。在此期间,我想在TableSmall上执行一些小更新,这些更新应该立即执行,主事务的回滚不应该回滚这些小更新。
我目前的问题是,这些小的更新将锁定TableSmall\直到事务完成。我需要能够继续更新TableSmall,即使事务仍在运行。
是否可以使用@Transactional(propagation = Propagation.REQUIRES_NEW)注释小更新,以避免锁定这些小更新的行/表?
发布于 2019-12-20 01:38:39
来自文档。
创建一个新事务,如果有一个exists.Analogous指向同名的EJB事务属性,则挂起当前事务。
注意:实际的事务暂停将不会在所有事务管理器之外工作。这尤其适用于org.springframework.transaction.jta.JtaTransactionManager,,它需要javax.transaction.TransactionManager使其可用(这在标准Java中是特定于服务器的)。
PROPAGATION_REQUIRES_NEW作用域总是定义它自己的事务同步。现有的同步将被适当地暂停和恢复。
所以我认为如果你只在一个线程实例中运行这些小的更新,它应该会像你所期望的那样为你工作。
对于小任务,也可以考虑@Transactional(propagation=NESTED)。这个link也很有趣。
我之所以获得锁,是因为在多线程环境中,我们调用了不止一个this方法,结果是我们所有的事务都挂起了。
https://stackoverflow.com/questions/54036518
复制相似问题