日志异步处理, @Valid +@NotNull 组合不生效问题,及异常处理

385 阅读2分钟

目录

1. 日志的异步处理

如图测试  controller层 和 service层 线程名不同 

2. 参数校验 @Valid +@NotNull springboot

2.1.写异常处理 400异常处理

        2.1.1 第一种 重写默认异常方式

2.1.2 第二种 controller正常写 在全局异常处理中写

 结果所示


1. 日志的异步处理

不同线程调用 tomcat+spring两个 在执行的方法上面加 -> impl层

@EnabledAsync 加载配置类上 启动类是特殊的配置类

/**
 * @Async 描述的方法底层会异步执行 不由web服务线程执行 而是交给spring自带的线程池中的线程去执行
 * 优点: 不会长时间阻塞web服务(例如tomcat)线程
 * 一般用于数据量特别大的日志服务(频繁 耗时) 
 *
 * 同时 需要配置这个注解  启动类上加注解 启动异步执行注解
 * @param log
 * @return
 */

[组合 @Async+@EnabledAsync]

如图测试  controller层 和 service层 线程名不同

2. 参数校验 @Valid +@NotNull springboot

如果不生效 查看导入的包是否正确

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.1.写异常处理 400异常处理

        2.1.1 第一种 重写默认异常方式

(直接抛出自己定义的异常/这里运行时异常)

   @PostMapping("/*")
    public SystemResult recordUserADVideoLog(@RequestBody @Valid AngelAdVideoLog angelAdVideoLog,BindingResult bindingResult, HttpServletRequest request ) {

        log.debug("========> * <========");


        if (bindingResult.hasErrors()) {
//自定义的异常类    bindingResult.getFieldError().getDefaultMessage()是抛出的异常信息
   throw new RuntimeException( bindingResult.getFieldError().getDefaultMessage());

        }

2.1.2 第二种 controller正常写 在全局异常处理中写

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public SystemResult throwCustomException(MethodArgumentNotValidException methodArgumentNotValidException) {

        log.error("[ @Vaild异常捕获 ] " + methodArgumentNotValidException.getMessage());

        return SystemResult.error((methodArgumentNotValidException.getBindingResult().getFieldError().getDefaultMessage()));
    }

 结果所示