如果我们使用Propagation Requires_new,则它会暂停现有事务并创建新事务。那对suspends a transaction
来说意味着什么呢?挂起的交易会发生什么?场景背后到底发生了什么?
暂停交易持有的资源会发生什么?
答案 0 :(得分:4)
首先,这里的问题是线程的重复:How does transaction suspension work in Spring?。不过,我会试试 以不同的方式回答这个问题。
要了解Spring @Transaction API的工作原理,我们必须查看transaction propagation mechanism。
PROPAGATION_REQUIRES_NEW
使用完全独立的交易 对于每个受影响的事务范围潜在的物理 事务是不同的,因此可以提交或回滚independently
。这里outer transaction
不受影响inner transaction
的回滚状态。
当transaction
为suspended
时,它等待它可以从中断的地方继续。这意味着,transaction
为suspended
时发生的更改不属于同一atomic unit
。换句话说,如果transaction
(在它恢复生命之后)suspended
rolled back
suspended transaction
期间发生的事情将不会是fails to commit
API
除了事务配置之外,Spring事务不会公开任何suspend
开发人员直接控制它。但是,如果您使用JTA管理交易,则可以调用resume
和Transaction tobj = TransactionManager.suspend();
..
TransactionManager.resume(tobj);
方法,如下所示:
<a id="comprar" title="Comprar" class="btn-pdp-bag" href="#"> send Gtm </a>
我希望这可以帮到你!