# Springboot中Transcation事务
# 根据最佳实践,建议的操作顺序如下:
先调用阿里云服务创建RAM子账号:
- 确保子账号在阿里云上成功创建,并获取到相关的子账号信息(如子账号ID、名称等)。
- 这一步确保了子账号的实际存在性和有效性。
再将RAM子账号的信息入库:
- 将从阿里云获取到的子账号信息存储到数据库中。
- 入库时可以添加额外的字段,如创建时间、状态等,以便后续管理和审计。
# 原因分析
- 数据一致性:先创建子账号并获取相关信息,可以确保入库的数据是真实有效的,避免因子账号创建失败导致数据库中存在无效记录。
- 错误处理:如果在创建子账号时出现错误,可以直接捕获并处理,而不会影响数据库的完整性。
- 事务管理:如果需要在数据库操作中使用事务管理,可以在确认子账号创建成功后再开始数据库事务,确保整个过程的原子性。
# 控制层中事务是否回滚问题
以下代码中,aliyunRamUserService.remove(args);被@Transcation(rollback=Exception.class)注解包裹,就算外层异常被捕获,事务也会回滚
@PostMapping("remove")
public ResponseResultModel<Object> remove(@RequestBody AliyunRamUser.RemoveArgs args) {
try {
aliyunRamUserService.remove(args);
return responseSuccess("删除RAM子账户成功");
} catch (ServerException e) {
log.error("删除RAM子账户失败", e);
return responseFailure(ResponseCodeEnum.SERVER_OPERATE_ERROR, e.getMessage());
} catch (Exception e) {
log.error("删除RAM子账户失败", e);
return responseFailure(ResponseCodeEnum.SERVER_ERROR, "删除RAM子账户失败");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13