首发博客地址
系列文章地址
Spring Boot 是基于 Spring 框架的疾速开发框架,提供了许多便捷的个性和机制来简化开发过程。在 Spring Boot 中,事务的流传机制是通过 @Transactional 注解来实现的。
@Transactional 注解能够用于办法、类或接口上,用于标识办法或类中的所有办法须要进行事务管理。通过设置 @Transactional 注解的 propagation 属性,能够指定事务的流传行为。
事务的流传行为分为以下几种:
- REQUIRED:示意以后办法必须在一个事务内运行。如果以后曾经存在事务,则退出该事务;如果以后不存在事务,则创立一个新的事务。
- SUPPORTS:示意以后办法反对事务。如果以后存在事务,则退出该事务;如果以后不存在事务,则以非事务形式运行。
- MANDATORY:示意以后办法必须在一个事务内运行。如果以后不存在事务,则抛出异样。
- REQUIRES_NEW:示意以后办法必须在一个新的事务内运行。如果以后存在事务,则挂起该事务并创立一个新的事务。
- NOT_SUPPORTED:示意以后办法不反对事务。如果以后存在事务,则挂起该事务。
- NEVER:示意以后办法不反对事务。如果以后存在事务,则抛出异样。
- NESTED:示意以后办法必须在一个嵌套事务内运行。如果以后存在事务,则在嵌套事务内运行;如果以后不存在事务,则创立一个新的事务。
上面是一个应用 Spring Boot 流传机制的示例:
@Service
@Transactional(propagation = Propagation.REQUIRED)
public class UserService {
@Autowired
private UserRepository userRepository;
public void createUser(User user) {
// 保留用户信息
userRepository.save(user);
// 调用其余办法,如果其余办法也有 @Transactional 注解,则会参加到以后事务中
updateUserStatus(user.getId());
}
@Transactional(propagation = Propagation.REQUIRED)
public void updateUserStatus(Long userId) {
// 更新用户状态
userRepository.updateStatus(userId);
}
}
在下面的示例中,UserService 类的 createUser 办法应用了 @Transactional 注解,并设置了流传行为为 REQUIRED,示意该办法必须在一个事务内运行。在该办法中,先保留用户信息到数据库,而后调用了 updateUserStatus 办法。因为 updateUserStatus 办法也应用了 @Transactional 注解,并且流传行为也为 REQUIRED,所以它会参加到以后事务中,保障了两个办法的操作在同一个事务内执行。
通过应用 @Transactional 注解,咱们能够不便地管制事务的流传行为,实现对数据库操作的事务管理。
本文由 mdnice 多平台公布