关于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类中的异样解决办法来解决异样。

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


响应规范设计

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据