java中 事务的七种传播行为 - 面试宝典
【摘要】 在Java中,事务的传播行为是指在多个事务方法相互调用时,事务如何在这些方法之间传播和管理的方式。Java中的事务传播行为有以下七种:PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常见的传播行为,适用于大部分情况。PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式...
在Java中,事务的传播行为是指在多个事务方法相互调用时,事务如何在这些方法之间传播和管理的方式。Java中的事务传播行为有以下七种:
- PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常见的传播行为,适用于大部分情况。
- PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。这种传播行为适用于不需要事务支持的方法。
- PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。这种传播行为适用于必须在事务中执行的方法。
- PROPAGATION_REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则将当前事务挂起。这种传播行为适用于需要独立事务的方法。
- PROPAGATION_NOT_SUPPORTED:以非事务的方式执行方法。如果当前存在事务,则将当前事务挂起。这种传播行为适用于不需要事务支持的方法。
- PROPAGATION_NEVER:以非事务的方式执行方法。如果当前存在事务,则抛出异常。这种传播行为适用于不允许在事务中执行的方法。
- PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务中执行;如果当前没有事务,则创建一个新的事务。嵌套事务是保存在当前事务中的子事务,它可以独立于父事务进行提交或回滚。这种传播行为适用于需要嵌套事务支持的方法。 以上是Java中事务的七种传播行为,根据具体的业务需求和场景选择合适的传播行为可以有效地管理事务。
以下是关于Java中事务传播行为的示例代码:
javaCopy code@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional(propagation = Propagation.REQUIRED)
public void createUser(User user) {
// 创建用户逻辑
userRepository.save(user);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateUser(User user) {
// 更新用户逻辑
userRepository.save(user);
}
@Transactional(propagation = Propagation.REQUIRED)
public void deleteUser(Long userId) {
// 删除用户逻辑
userRepository.deleteById(userId);
}
@Transactional(propagation = Propagation.SUPPORTS)
public User getUser(Long userId) {
// 获取用户逻辑
return userRepository.findById(userId).orElse(null);
}
@Transactional(propagation = Propagation.MANDATORY)
public void performActionInTransaction() {
// 必须在事务中执行的逻辑
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void performActionWithoutTransaction() {
// 不需要事务支持的逻辑
}
public void performActionWithTransaction() {
// 默认的传播行为是REQUIRED,会加入调用者的事务
// 执行需要事务支持的逻辑
}
}
上述代码中,UserService
类中的各个方法使用了不同的事务传播行为。根据具体的业务需求,可以选择合适的传播行为来管理事务。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
皮牙子抓饭2023/08/25 01:18:471楼编辑删除举报