首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Propagation.REQUIRES_NEW锁定

Propagation.REQUIRES_NEW锁定
EN

Stack Overflow用户
提问于 2019-01-04 17:51:23
回答 1查看 295关注 0票数 0

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

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

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

EN

回答 1

Stack Overflow用户

发布于 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方法,结果是我们所有的事务都挂起了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54036518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档