propagation.requires\u new locking需要新的锁

u4dcyp6a  于 2021-06-16  发布在  Mysql
关注(0)|答案(1)|浏览(330)

考虑一个需要很长时间的事务。在此期间,我想执行一些小的更新 TableSmall ,应该立即执行,并且主事务的回滚不应该回滚那些小的更新。
我目前的问题是,这些小更新将锁定 TableSmall \直到交易完成。即使事务仍在运行,我也需要能够继续更新tablesmall。
可以用注解对小更新进行注解吗 @Transactional(propagation = Propagation.REQUIRES_NEW) 为了避免锁定这些小更新的行/表?

k5ifujac

k5ifujac1#

从文件中。
创建一个新事务,如果当前事务存在,则挂起当前事务。类似于同名的ejb事务属性。
注意:在所有事务管理器上,实际的事务暂停不会立即生效。这尤其适用于org.springframework.transaction.jta.jtatransactionmanager,它要求javax.transaction.transactionmanager对其可用(在标准JavaEE中是特定于服务器的)。
传播需要新的作用域总是定义它自己的事务同步。现有同步将被挂起并适当恢复。
所以我认为,如果您只在一个线程示例中运行这些小更新,它应该像您期望的那样对您有效。
对于小任务,还可以考虑@transactional(propagation=nested)。这个链接也很有趣。
我得到锁是因为在多线程环境中,我们调用了多个this方法,结果导致所有事务都被挂起。

相关问题