PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED两种传播机制的是容易混淆的。
1. 开启事务的多少,PROPAGATION_REQUIRES_NEW会开启很多事务,外部事务挂起,里面的事务独立执行,对性能的损耗较大。PROPAGATION_NESTED为父子事务,实际上是借助jdbc的savepoint实现的,属于同一个事物。
2. PROPAGATION_NESTED的回滚可以总结为,子事务回滚到savepoint,父事务可选择性回滚或者不不滚;父事务回滚子事务一定回滚。
PROPAGATION_NESTED如一下一樣
在oracle數據庫中
CREATE OR REPLACE PROCEDURE pro_test(fbuildareac IN VARCHAR2)
AS
BEGIN
update t_broker_house set fhousecondition=fid where fid='ed7c17ec-ca2a-4fe7-b7f7-f8111c102ade';
savepoint a;
update t_broker_house set fhousecondition=fid where fid='f456255f-1934-424f-81fb-6654829d4651';
rollback to a;
update t_broker_house set fhousecondition=fid where fid='bac6e97b-05f4-47db-b849-75d7d72d5ba6';
commit;
DBMS_OUTPUT.put_line (fbuildareac);
END pro_test;
begin
pro_test('123');
end;
第1個和第3個是可以修改成功的 第二個事务回滚
相关推荐
例如,PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED的区别在于前者创建完全独立的新事务,而后者创建的是依赖于外部事务的子事务。在PROPAGATION_NESTED中,子事务的提交或回滚与外部事务紧密关联。 另外,当...
当`ServiceB.methodB`的传播级别设置为`PROPAGATION_REQUIRES_NEW`时,无论`ServiceA.methodA`是否在事务中,`ServiceB.methodB`都会启动一个新的独立事务,这样即使`ServiceB.methodB`的事务提交了,如果`ServiceA....
实际上,任何PROPAGATION_REQUIRED或PROPAGATION_REQUIRES_NEW都可以处理方法的嵌套调用。当两个方法都在同一事务范围内运行时,它们的行为与PROPAGATION_REQUIRED相同,它们将共享同一事务,确保所有操作要么全部...
Spring定义了七种事务传播行为:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER和PROPAGATION_NESTED。每种行为都...
例如,PROPAGATION_REQUIRED适合大部分需要事务控制的操作,而PROPAGATION_REQUIRES_NEW常用于需要独立事务环境的操作,比如发邮件、记录日志等。PROPAGATION_NESTED则用于需要部分独立事务的场景,它允许在保持现有...
例如,在处理支付业务时,可能会选择`PROPAGATION_REQUIRES_NEW`,以确保支付操作在一个独立的事务中完成,即使外部事务失败,支付状态也能正确保存。而在读取数据时,可能选择`PROPAGATION_SUPPORTS`,允许在已有...
4. **PROPAGATION_REQUIRES_NEW**:无论当前是否存在事务,都创建一个新的事务,并挂起当前事务。 5. **PROPAGATION_NOT_SUPPORTED**:以非事务方式执行操作;如果当前存在事务,则挂起当前事务。 6. **PROPAGATION_...
- **PROPAGATION_REQUIRES_NEW**:此行为总是创建一个新的事务来执行当前方法,即使当前已经存在事务,也会挂起当前事务并创建一个新的事务。这种方式适用于那些需要独立事务的操作,即使它们被调用在一个更大的事务...
在实际开发中,例如在删除客户和订单的场景下,可以使用PROPAGATION_REQUIRES_NEW,确保订单删除失败时,不会影响客户删除操作的回滚。PROPAGATION_NESTED则依赖于JDBC3.0的保存点技术,可以在子事务失败时恢复到...
例如,一个PROPAGATION_REQUIRED的方法调用了一个PROPAGATION_REQUIRES_NEW的方法,那么第二个方法将在新的独立事务中执行,即使第一个方法已经在一个事务中。 SSH,通常指的是Spring、Struts和Hibernate三个开源...
例如,一个服务类中的某个方法可能使用`@Transactional(propagation = Propagation.REQUIRES_NEW)`注解,这样无论调用它的方法是否在事务中,都会开启一个新的独立事务。 Spring的事务管理器,如...
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER--以非事务方式执行,如果...
4. PROPAGATION_REQUIRES_NEW:总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。 5. PROPAGATION_NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务。 6. PROPAGATION_NEVER:总是非...
4. PROPAGATION_REQUIRES_NEW:总是创建新的事务,无论当前是否存在事务,原有事务会被挂起。 5. PROPAGATION_NOT_SUPPORTED:在非事务环境中执行,如果当前有事务,就挂起。 6. PROPAGATION_NEVER:不允许在事务中...
例如,一个服务方法可能被配置为`@Transactional(propagation = Propagation.REQUIRES_NEW)`,这意味着即使在调用它的方法已经在一个事务中,它也会启动一个新的独立事务。 此外,`Spring事务`不仅涉及传播特性,还...
4. **Propagation_REQUIRES_NEW**:总是开启一个新的事务,如果当前存在事务,则把当前事务挂起。在场景六中,`AccountServiceImpl`的方法标记为`REQUIRES_NEW`,无论调用它的方法是否有事务,都会创建一个新的独立...
其他如`PROPAGATION_SUPPORTS`、`PROPAGATION_MANDATORY`、`PROPAGATION_REQUIRES_NEW`、`PROPAGATION_NOT_SUPPORTED`、`PROPAGATION_NEVER`和`PROPAGATION_NESTED`分别有不同的应用场景和策略。 其次,事务的隔离...
4. **PROPAGATION_REQUIRES_NEW**:无论当前是否存在事务,都会新建一个事务并在其中执行方法。原有的事务会被挂起,直到该方法执行完毕后再恢复。这种方式常用于需要独立事务操作的场景,例如支付交易。 5. **...
其他如PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER和PROPAGATION_NESTED等都有各自的适用场景。 在实际应用中,Spring事务管理还可以与其他功能结合使用,如...