考虑事务,这需要很长时间。在此期间,我想对TableSmall
执行一些小的更新,这些更新应该立即执行,并且回滚主Transaction不应回滚那些小的更新。
我当前的问题是,这些小的更新将锁定TableSmall
\,直到交易完成。即使事务仍在运行,我也需要能够继续更新TableSmall。
可以用@Transactional(propagation = Propagation.REQUIRES_NEW)
注释这些小更新,以避免锁定这些小更新的行/表吗?
答案 0 :(得分:0)
摘自文档。
创建一个新事务,如果存在则暂停当前事务。类似于具有相同名称的EJB事务属性。
注意:实际的事务中止将无法在所有事务管理器中立即使用。这尤其适用于org.springframework.transaction.jta.JtaTransactionManager,它要求使javax.transaction.TransactionManager可用(在标准Java EE中特定于服务器)。
PROPAGATION_REQUIRES_NEW范围始终定义其自己的事务同步。现有同步将被暂停并适当恢复。
因此,我认为,如果您仅在一个线程实例中运行这些小的更新,它将按您的期望工作。
对于小任务,也请考虑@Transactional(propagation = NESTED)。这个link也很有趣。
之所以得到锁,是因为在多线程环境中,我们多次调用此方法,结果导致所有事务都被挂起。