Knife4j是一款基于Swagger 2的在线API文档框架,是日常开发中很常用的框架,基于此框架,后端可以和前端开发人员进行高效沟通。 官网
xml<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
<version>4.0.0</version>
</dependency>
ymlknife4j:
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即可进入
虽然 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 供排查问题。
xml<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.23</version>
</dependency>
<!--数据库驱动-->
..
<!--log4j-->
..
很多时候程序出现的异常并不是,我们在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);
}
}
用一个类出现同一个类报cannot be cast to,不能强制转换,服务器错误500
javajava.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>-->
放置常用的一些响应信息
javapublic 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;
}
}