springboot事务
时间: 2023-09-12 18:03:47 浏览: 79
Spring Boot 提供了很好的事务管理支持,可以使用 @Transactional 注解来标记我们需要事务处理的方法或类。
使用 @Transactional 注解时,需要注意以下几点:
1. 该注解只能用于 public 方法上。
2. 默认情况下,只有 RuntimeException 以及其子类抛出时才会回滚事务。如果需要对其他异常进行回滚,可以在注解中使用 rollbackFor 属性。
3. 在同一个类中调用被 @Transactional 注解标记的方法,事务不会生效。需要使用 AOP 切面技术来实现事务的传播行为。
示例代码:
```
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void createUser(User user) {
userRepository.save(user);
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void updateUser(User user) {
userRepository.save(user);
if (user.getAge() < 18) {
throw new RuntimeException("Age is too young");
}
}
}
```
在上面的例子中,createUser 方法和 updateUser 方法都使用了 @Transactional 注解来标记需要进行事务处理的方法。其中 updateUser 方法还使用了 propagation 属性来指定事务的传播行为,rollbackFor 属性来指定需要回滚的异常类型。
需要注意的是,当 updateUser 方法抛出 RuntimeException 异常时,整个事务会回滚,包括 createUser 方法中的操作也会被回滚。
阅读全文