【Java项目】Spring-全局异常+钉钉推送(实现生产问题监控)

297 阅读2分钟
girl18.jpg

概述

生产环境的线上问题,通常出现时都比较紧急,由于开发人员不能直接debug生产环境,通常处理起来不是很容易。因此,生产环境出问题时,如果能够将报错的接口和参数,推送到钉钉群,就可以帮助技术人员快速排查生产问题,避免对业务影响,出现生产事故。 这里结合Spring 全局异常和钉钉推送,介绍如何实现生产问题监控。

全局异常

Spring全局异常主要使用@ControllerAdvice 注解和@ExceptionHandler注解

@ControllerAdvice

该注解作用是给Controller控制器添加统一的操作或处理,结合@ExceptionHandler用于全局异常的处理,也可以使用@RestControllerAdvice以文本返回到浏览器,实际中该注解还有很多用途,这里不做深究,感兴趣可以下来了解;

@ExceptionHandler
  • 用来统一处理方法抛出的异常;
  • +ExceptionHandler注解中可以添加参数,参数是某个异常类的class,代表这个方法专门处理该类异常;
@ExceptionHandler(NumberFormatException.class)
public String handleExeption(Exception ex) {
    System.out.println("抛异常了:" + ex);
    ex.printStackTrace();
    String resultStr = "异常:NumberFormatException";
    return resultStr;
}

此时注解的参数是NumberFormatException.class,表示只有方法抛出NumberFormatException时,才会调用该方法。

  • 如果是通过try catch处理了异常,将不会进入到全局异常处理类,必须是通过运行时抛出的异常或者是通过throw new 加对应的异常,才会进入@ExceptionHandler 拦截。
配置过滤器

过滤器的作用,就是把httpServeletRequest包装成ContentCachingRequestWrapper类型继续往下传。

@Component
public class RequestCachingFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
        filterChain.doFilter(new ContentCachingRequestWrapper(httpServletRequest), httpServletResponse);
    }
}

第二步就是在使用的使用用方法getContentAsByteArray获取入参值:

if(req != null && req instanceof ContentCachingRequestWrapper){
                ContentCachingRequestWrapper wrapper =(ContentCachingRequestWrapper) req;
                log.error("request_body:{}", StringUtils.toEncodedString(wrapper.getContentAsByteArray(), Charset.forName(wrapper.getCharacterEncoding()))
                );
            }

这样你就获取到来自客户端请求的入参。注意inputStream只能读一次流就会被关闭,不会再被读取,所以如果在序列化等过程中读过一次inputStream,之后就不要尝试自己再读,会抛异常,无法读取数据。 参考: blog.csdn.net/weixin_4195…

钉钉群消息推送

详细的钉钉推送API可以参考地址:open.dingtalk.com/document/or…

钉钉群配置

钉钉配置1.png

钉钉配置2.png

总结

1、使用Spring 全局异常,可以对代码异常信息进行统一拦截; 2、使用钉钉推送,将异常信息及时推送到技术人员群里,及时反馈; 3、技术人员通过报错信息,监控生产环境,也可以帮助高效解决问题。 详细的视频讲解,请到B站www.bilibili.com/video/BV1Ez… ,如果能帮到您,请点赞支持关注一下; 详细的示例代码github地址为:github.com/zhcyixin/zh…