springboot事务中REQUIRES_NEW在什么情况下使用
时间: 2023-05-27 16:04:52 浏览: 70
在Spring Boot中,REQUIRES_NEW用于创建一个新的事务,而忽略当前事务。它适用于一下情况:
1. 当你需要在一个方法中开始一个新的事务,而不受当前事务的限制或影响时,可以使用REQUIRES_NEW。
2.当你需要在一个方法中独立执行一个操作,即使外部事务失败或回滚,也保持其独立性时,可以使用REQUIRES_NEW。
例如,假设有一个银行账户应用,用户在转账时,需要从一个账户扣款并向另一个账户添加资金。如果任何一个操作失败,应该回滚整个事务。但是,如果添加资金的操作预计将在市场上的一段时间内进行,而扣款操作必须立即完成,那么可以使用REQUIRES_NEW来独立控制添加资金的操作,保证它不会受到扣款操作回滚的影响。
相关问题
springboot 事务套事务
在 Spring Boot 中,事务套事务是指在一个事务方法中调用另一个事务方法时,是否会形成嵌套事务。默认情况下,Spring Boot 使用的是基于代理的事务管理机制。
根据 Spring 的事务传播行为(Transaction Propagation Behavior),当一个事务方法被另一个事务方法调用时,会根据配置的传播行为决定是否创建一个新的事务。
常见的传播行为包括:
1. REQUIRED:如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新的事务。这是默认的传播行为。
2. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务,并挂起当前事务。
3. NESTED:如果当前存在事务,则在当前事务的嵌套事务中执行。如果当前不存在事务,则创建一个新的事务。
当一个事务方法调用另一个使用 REQUIRES_NEW 或 NESTED 传播行为的事务方法时,将形成嵌套事务。嵌套事务是在当前事务的上下文中创建的子事务,可以独立提交或回滚。如果外层事务失败回滚,嵌套事务也会被回滚,但是嵌套事务的提交与回滚不会影响外层事务。
需要注意的是,使用嵌套事务时,底层数据库必须支持保存点(Savepoint)机制。
在 Spring Boot 中,你可以使用 `@Transactional` 注解来控制事务的传播行为和其他属性。例如,可以在方法上添加 `@Transactional(propagation = Propagation.REQUIRES_NEW)` 注解来表示该方法应该在一个新的事务中执行。
```
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void nestedTransactionMethod() {
// 嵌套事务的逻辑
}
```
需要注意的是,事务嵌套可能会增加系统的复杂性,因此在使用事务嵌套时需要谨慎考虑,并确保数据库支持相应的特性。
springboot中那种事务传播机制使用的较多?
在SpringBoot中,使用较多的事务传播机制是REQUIRED(默认值)。这种传播机制表示如果当前没有事务,就新建一个事务;如果已经存在一个事务中,加入到这个事务中,成为一个整体。在大多数情况下,这种传播机制可以满足常见的业务需求。同时,SpringBoot还支持其他传播机制,如SUPPORTS、MANDATORY、REQUIRES_NEW等,可以根据实际需求进行选择。