对于通过抛出异常触发事务返回友好提示信息,我就不详细解释了,记录一下
@Entity public class SysJob implements Serializable { private static final long serialVersionUID = 1L; /** * 任务ID */ @Id private Long jobId; /** * 任务名称 */ private String jobName; /** * 任务组名 */ private String jobGroup; /** * 调用目标字符串 */ private String invokeTarget; /** * cron执行表达式 */ private String cronExpression; /** * 计划执行错误策略(1立即执行 2执行一次 3放弃执行) */ private String misfirePolicy; /** * 是否并发执行(0允许 1禁止) */ private String concurrent; /** * 状态(0正常 1暂停) */ private String status; /** * 创建者 */ private String createBy; /** * 创建时间 */ private LocalDateTime createTime; /** * 更新者 */ private String updateBy; /** * 更新时间 */ private LocalDateTime updateTime; /** * 备注信息 */ private String remark; }
@RestController @RequestMapping("/api") @AllArgsConstructor @Slf4j public class TestController { private final ISysJobService sysJobService; /** * 发生异常,触发事务并且返回前端 * * @param job * @return */ @PostMapping public ResponseEntity save(@RequestBody SysJob job) { try { sysJobService.save(job); return ResponseEntity.ok(BizResponse.build("成功")); } catch (Exception ex) { log.info("save job failed"+ex.getMessage()); return ResponseEntity.ok(BizResponse.build("失败")); } } }
public interface ISysJobService { void save(SysJob job); }
@Service @AllArgsConstructor public class SysJobServiceImpl implements ISysJobService { private final SysJobMapper sysJobMapper; @Override @Transactional(rollbackFor = Exception.class) public void save(SysJob job) { SysJob save = sysJobMapper.save(job); if (1 == 1) { //throw ServiceException.build(RetEnum.RET_COMM_OPERATION_FAIL); throw new RuntimeException("失败1111"); } } }
public interface SysJobMapper extends JpaRepository<SysJob,Long> { }
简单解释一下,就是通过service实现类打上 @Transactional(rollbackFor = Exception.class) 抛出异常以及对应信息,在controller进行try catch,try进行执行成功信息返回, catch 日志记录失败信息返回