为什么要手动回滚事物?
1、原因是因为代码中我写了try catch,try catch后异常被catch捕获了,catch后的业务代码还会继续执行,捕获后的异常会在后台的日志中打印,不会把这个异常错误抛给前端了;
2、这个时候如果你使用的是事物注解@Transcation,因为你异常被捕获所以它并不会帮你回滚代码了,这时候就需要我们自己在catch中进行手动事物回滚。
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private DataSourceTransactionManager transactionManager;
public Result test(){
// 手动事物
TransactionStatus transaction = transactionManager.getTransaction(new DefaultTransactionDefinition());
try{
// 业务代码修改
// 业务代码新增
// 业务代码删除
//一定要写在所有业务的最后面
transactionManager.commit(transaction);
}catch (Exception e){
//异常中进行手动回滚
transactionManager.rollback(transaction);
return Result.fail("出现异常");
}
return Result.succ("修改成功");
}
}