乐趣区

关于springboot:SpringBoot工程下Lombok热部署实现健康检查全局异常处理响应标准

lombok 应用步骤:

1. 装置 lombok 插件
2. 增加 lombok 依赖
3. 在对应的类上应用 lombok 提供的注解


lombok 提供的注解:

@Data 此注解形容类时,在编译时会为此类生成 get,set,toString,hashCode,equals 等办法
@ToString 提供重写的 toString 办法
@Setter 提供 set 办法
@Getter 提供 get 办法
@Slf4j:lombok 发现类上有此注解时,会为此类创立一个日志对象,其变量为 log
@AllArgsConstructor 提供全参构造函数
@NoArgsConstructor 提供无参构造函数


lombok 原理:

在 java 源码编译时,基于 lombok 做了拦挡,底层借助字节码技术为 class 文件做了加强


热部署实现

增加依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>

依赖下载当前, 可重启 reload 我的项目, 而后当咱们批改了 src/main/java 目录下的 java 文件或批改了 src/main/resources 目录下的配置文件时,默认都会重启你的 web 服务器,然而批改了测试类或 html 文件不会主动重启和部署。


健康检查实现

增加依赖:

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

启动我的项目, 在浏览器中输出如下地址:(SpringBoot 默认关上的监控选项无限)
http://localhost/actuator

如果心愿查看更多 actuator 选项,能够在 spring boot 中配置文件
application.properties 中增加如下语句:

management.endpoints.web.exposure.include=*

而后, 重启服务器, 基于拜访 http://localhost/actuator 地址 …


全局异样解决

解决标准:
捕捉异样时与抛出的异样必须齐全匹配,或者捕捉异样是抛出异样的父类类型。
防止间接抛出 RuntimeException, 更不容许抛出 Exception 或者 Throwable, 应应用有业务含意的自定义异样(例如 ServiceException)。
捕捉异样后必须进行解决(例如记录日志)。如果不想解决它,须要将异样抛给它的调用者。
最外层的逻辑必须解决异样,将其转化成用户能够了解的内容。
避免出现反复的代码(Don’t Repeat Yourself), 即 DAY 准则。

异样解决形式:
1.try{}catch(){} 毛病代码量大, 可重复性差, 难以保护

2. 在 Controller 类中定义一个或多个异样解决办法

所有的异样解决办法须要用 @ExceptionHandler 进行形容, 并申明它形容的办法能够解决的异样类型。毛病是只能解决以后 Controller 类中各个办法呈现的 RuntimeException 异样或者是其子类类型的异样。

3. 在管制逻辑层定义全局异样解决类以及异样解决办法

package com.cy.pj.goods.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@Slf4j
@ControllerAdvice// 此注解形容的类为全局异样解决类, 在此类中能够定义多个异样解决办法
public class GlobalExceptionHandler {@ExceptionHandler(RuntimeException.class)
    @ResponseBody
    public JsonResult doHandleRuntimeException(RuntimeException e) {log.error("RuntimeException.exception{}",e.getMessage());
        return new JsonResult(e.getMessage());
    }
    @ExceptionHandler(IllegalArgumentException.class)
    @ResponseBody
    public JsonResult doHandleException(IllegalArgumentException e) {log.error("IllegalArgumentException.exception{}",e.getMessage());
        return new JsonResult(e.getMessage());
    }
}

如果 Controller 类中有异样解决办法,那么必定还是遵循部分优先的准则,由 Controller 类中的异样解决办法来解决异样。

如果全局异样解决类中存在多个异样解决办法,而其中一个办法的可解决异样的类型是另一个办法的子类类型,那么当出现异常时,则会由这个子类类型的办法来解决


响应规范设计

退出移动版