SpringBoot事务回滚
1、Controller代码
@PostMapping("/add") public RestResult add(ModelParamInputDTO modelParamDTO) {
this.isValid("modelName", modelParamDTO.getModelName());
this.isValid("drugId", modelParamDTO.getDrugId());
this.isValid("drugCode", modelParamDTO.getDrugCode());
aiModelService.addAiModel(modelParamDTO);
return ResultGenerator.genSuccessResult().setMessage("保存成功");
}
@PostMapping("/isValid")
public RestResult isValid(@RequestParam String key, String value) {
Boolean isValid = aiModelService.isValid(key, value);
if (isValid) {
return ResultGenerator.genSuccessResult();
} else {
String[] ret = {""};
VALID_MESSAGE.forEach((k, v) -> {
if (k.equals(key)) {
ret[0] = v;
}
});
throw new ServiceException(ret[0]);
}
}
2、service代码
@Override@Transactional(rollbackFor=Exception.class)
public void addAiModel(ModelParamInputDTO modelParamDTO) {
String modelId = CoreUtils.getUUID();
AiModel aiModel = new AiModel();
BeanUtils.copyProperties(modelParamDTO, aiModel);
aiModel.setId(modelId);
aiModel.setOrgId(ORG_ID);
aiModel.setGmtCreate(new Date());
aiModel.setModelName(modelParamDTO.getDrugName());
aiModelMapper.insert(aiModel);
String s = null;
int d = s.length();
}
3、Application代码
@SpringBootApplication@MapperScan("cn.itpower.pms.modules.**.dao")
@EnableConfigurationProperties
@EnableTransactionManagement
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
代码如上,我自己设置了一个空指针异常,但是事务没有回滚,我试过:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
结果事务还是没有回滚,请问究竟是怎么回事呢?
回答:
在Application上是否添加了注解
@EnableTransactionManagement
回答:
mysql的话,数据库引擎需要设置innodb
回答:
你需要贴出的是调用addAiModel方法的那部分代码
回答:
能确定下你的表是innoDB吗
ALTER TABLE `database名`.`表名`ENGINE = InnoDB;
比如mysql建一个Database test,下面的表既可以是myisam 也可以是innodb
回答:
可以看看这个例子项目:https://github.com/chanjarste...
希望对你有用
回答:
@PostMapping("/add") public RestResult add(ModelParamInputDTO modelParamDTO) {
this.isValid("modelName", modelParamDTO.getModelName());
this.isValid("drugId", modelParamDTO.getDrugId());
this.isValid("drugCode", modelParamDTO.getDrugCode());
aiModelService.addAiModel(modelParamDTO);
return ResultGenerator.genSuccessResult().setMessage("保存成功");
}
如上代码可能存在问题,是否和缺少注解@RequestBody有关?
另外,Controller不要使用dto接收参数,使用VO。
以上是 SpringBoot事务回滚 的全部内容, 来源链接: utcz.com/p/169256.html