编辑
2023-03-16
实用工具
00

简介

Knife4j是一款基于Swagger 2的在线API文档框架,是日常开发中很常用的框架,基于此框架,后端可以和前端开发人员进行高效沟通。 官网

引入knife4j依赖

xml
<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi2-spring-boot-starter</artifactId> <version>4.0.0</version> </dependency>

配置yml

yml
knife4j: enable: true openapi: title: SpringWeb官方文档 description: "学习SpringWeb框架集成的项目" email: 823621247@qq.com concat: 如痴如醉 url: https://localhost:8080/doc.html version: v4.0 license: Apache 2.0 license-url: https://stackoverflow.com/ terms-of-service-url: https://stackoverflow.com/ group: test1: group-name: 控制器 api-rule: package api-rule-resources: - com.lhw.controller

重启服务器输入localhost/doc.html即可进入

编辑
2023-03-15
实用工具
00

Druid简介🍿

Druid 是Java语言中最好的数据库连接池。

虽然 HikariCP 的速度稍快,但是,Druid能够提供强大的监控和扩展功能,也是阿里巴巴的开源项目。

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。

Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。

Spring Boot 默认数据源 HikariDataSource 与 JdbcTemplate中已经介绍 Spring Boot 2.x 默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源。

而Druid已经在阿里巴巴部署了超过600个应用,经过好几年生产环境大规模部署的严苛考验!

  • stat:Druid内置提供一个StatFilter,用于统计监控信息。

  • wall:Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析。Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。

  • log4j2:这个就是 日志记录的功能,可以把sql语句打印到log4j2 供排查问题。

添加Druid依赖

xml
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.23</version> </dependency> <!--数据库驱动--> .. <!--log4j--> ..
编辑
2023-03-14
实用工具
00

前提

很多时候程序出现的异常并不是,我们在enum里定义好的那些,大部分是程序运行时的异常,为了返回值的统一性,我们需要对那些突然出现异常进行操作

代码

java
package com.lhw.management.config; import com.lhw.common.Result; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.SneakyThrows; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; /** * 描述:拦截Controller方法的返回值,统一处理返回值/响应体 * @author lihaowei */ @RestControllerAdvice(basePackages = {"com.ewell.medai.connotation.qc.management.controller"}) public class ResultAdvice implements ResponseBodyAdvice<Object> { @Autowired private ObjectMapper objectMapper; @Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) { return true; } @SneakyThrows @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { if(o instanceof String){ return objectMapper.writeValueAsString(Result.success(o)); } if(o instanceof Result){ return o; } return Result.success(o); } }
编辑
2023-03-13
遇到的问题
00

程序运行异常

用一个类出现同一个类报cannot be cast to,不能强制转换,服务器错误500

java
java.xxxx.xxxx cannot be cast to java.xxxx.xxxx

处理方法

可能是SpringBoot热部署的问题,导致虽然是同一个类但是由于是不同的类加载器加载导致,他们是不同的从而转换异常

pom文件中注释掉热部署的依赖

xml
<!-- <dependency>--> <!-- <groupId>org.springframework.boot</groupId>--> <!-- <artifactId>spring-boot-devtools</artifactId>--> <!-- <optional>true</optional>--> <!-- </dependency>-->
编辑
2023-03-13
实用工具
00

搭建新的项目时都需要设置统一的响应类(Result)

首先设置一个枚举类Enum

放置常用的一些响应信息

java
public enum ResultCodeEnum { ERROR(100, "系统错误"), SUCCESS(200, "操作成功"), FAILED(500, "操作失败"); VALIDATE_FAILED(404, "参数检验失败"), UNAUTHORIZED(401, "暂未登录或token已经过期"), FORBIDDEN(403, "没有相关权限"); // 自定义状态码 private final int code; // 自定义描述 private final String msg; ReturnCode(int code, String msg){ this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } }