springboot中的controller层增加事务控制
程序员文章站
2024-03-02 12:57:16
...
大多数编程者习惯会在service层加事务控制,当一个controller层调用了多个service的update或者insert方法时,第一个成功了,第二个失败了。那么就会有第一个的事务会回退吗的困惑。其实通过在方法上@Transactional注解就可以控制。但在controller中不要使用try catch被捕捉了就不会回退事务。反正自己动手试试就知道。 但面向很多业务时还是建议放在service再做层封装
controller
//可行
@PostMapping("/updateCustTel")
@Transactional
public BctResponse updateCustTel(@RequestBody BctRequest<UpdateCustInfoReq> reqBctRequest) throws Exception{
log.info("UpdatePersonInfoController.updateCustTel-------->start");
boolean flag = userInfoService.updateBySelective(userInfo);//success
userInfoService.insert(new UserInfo()); //fail
log.info("UpdatePersonInfoController.updateCustTel-------->end");
return BctResponse.success();
}
//不可行
@PostMapping("/updateCustTel")
@Transactional
public BctResponse updateCustTel(@RequestBody BctRequest<UpdateCustInfoReq> reqBctRequest) throws Exception{
log.info("UpdatePersonInfoController.updateCustTel-------->start");
try{
boolean flag = userInfoService.updateBySelective(userInfo);//success
userInfoService.insert(new UserInfo()); //fail
log.info("UpdatePersonInfoController.updateCustTel-------->end");
}catch(Execption e){
e.getMessage()
}
return BctResponse.success();
}