考虑一个需要很长时间的事务。在此期间,我想执行一些小的更新 TableSmall ,应该立即执行,并且主事务的回滚不应该回滚那些小的更新。我目前的问题是,这些小更新将锁定 TableSmall \直到交易完成。即使事务仍在运行,我也需要能够继续更新tablesmall。可以用注解对小更新进行注解吗 @Transactional(propagation = Propagation.REQUIRES_NEW) 为了避免锁定这些小更新的行/表?
TableSmall
@Transactional(propagation = Propagation.REQUIRES_NEW)
ubby3x7f1#
从文件中。创建一个新事务,如果当前事务存在,则挂起当前事务。类似于同名的ejb事务属性。注意:在所有事务管理器上,实际的事务暂停不会立即生效。这尤其适用于org.springframework.transaction.jta.jtatransactionmanager,它要求javax.transaction.transactionmanager对其可用(在标准JavaEE中是特定于服务器的)。传播需要新的作用域总是定义它自己的事务同步。现有同步将被挂起并适当恢复。所以我认为,如果您只在一个线程示例中运行这些小更新,它应该像您期望的那样对您有效。对于小任务,还可以考虑@transactional(propagation=nested)。这个链接也很有趣。我得到锁是因为在多线程环境中,我们调用了多个this方法,结果导致所有事务都被挂起。
1条答案
按热度按时间ubby3x7f1#
从文件中。
创建一个新事务,如果当前事务存在,则挂起当前事务。类似于同名的ejb事务属性。
注意:在所有事务管理器上,实际的事务暂停不会立即生效。这尤其适用于org.springframework.transaction.jta.jtatransactionmanager,它要求javax.transaction.transactionmanager对其可用(在标准JavaEE中是特定于服务器的)。
传播需要新的作用域总是定义它自己的事务同步。现有同步将被挂起并适当恢复。
所以我认为,如果您只在一个线程示例中运行这些小更新,它应该像您期望的那样对您有效。
对于小任务,还可以考虑@transactional(propagation=nested)。这个链接也很有趣。
我得到锁是因为在多线程环境中,我们调用了多个this方法,结果导致所有事务都被挂起。