2. Java 后端万用项目模板使用教程 - 智能协同云图库项目教程 - 编程导航教程 作者:[小白条](https://gitee.com/falle22222n-leaves) - [编程导航](https://www.code-nav.cn/post/181642003511985。

作者:小白条 - 编程导航 编号 5563

今天来给大家介绍一下星球的后端 Spring Boot 万用模板的使用。

1、每个模块的简要概写

2、一些重点模块的讲解

2.1 全局项目配置

application.yml

数据库配置文件是每一个项目都要修改的,一般修改内容为:数据库库名,例如: my_db,用户名: xxxx 密码: xxxx。

Redis 在一伙伴匹配项目中用到,如有需要需要替换成自己的密码。并且在 Spring Boot 启动类中作出如下修改。

2.2 全局请求、鉴权拦截器

AuthInterceptor 和 LogInterceptor

先介绍下 AuthInterceptor, 权限校验机制,判断用户的 role(角色) 是否为管理员、用户、ban(封号) 三种情况。

像创建用户这个方法就是只有管理员能够使用,用 @AuthCheck 自定义注解,然后写上使用该方法要有的权限即可。权限校验器因为是 @Around 环绕通知并且表明在有 authCheck 注解的方法周围执行如下逻辑。

@Around 环绕通知在也就是在方法执行前后额外添加的逻辑。AOP 功能的诠释,如果有不懂这段逻辑的可以去回顾下 Spring 的 AOP 功能, 面试 中经常会提及,能够回答出 AOP 的实际项目应用也是很不错的一个点。

接下来介绍一下 LogInterceptor

简要说明:请求日志拦截器,用于输出请求日志,@Around 是环绕通知,然后用了切入点表达式,要拦截哪个包或者哪些包下面的哪个方法或者是全部方法。这段切入点表达式的功能就是对 com.yupi.springbootinit.controller 中所有方法进行拦截。也就是说控制层执行方法就会打印日志进行输出。有利用异常信息的捕获和后端调试 debug。

2.3 通用响应类

BaseResponse、ResultUtils 和 ErrorCode

下面是 BaseResponse 的介绍:

通用返回类,code 表示响应状态码,data 存放返回的数据,message : 成功或者失败的额外信息。

下面是 ResultUtils 的介绍:

主要用于简化 BaseResponse 的操作,将成功,失败的一些通用情况进行的静态方法的封装,然后可以很方便的进行调用,比如调用 success 方法,响应状态码就是 0,然后会将 data 封装到 BaseResponse 的 data 属性,message 为 "ok"。如果你的前端想要响应状态吗为 200,那么将这里的 0 改成 200 就可以了, 这边的 message 为固定消息 "ok"。可以再设置一个静态方法,进行方法重构, success 形参为 (T data,String message),然后可以动态定义成功的时候的返回消息。

下面是 ErrorCode 的介绍:

ErrorCode 配合上面的 ResultUtils 使用, 可以定义枚举类将常规的响应状态码和响应信息进行封装。比如: 无权限访问 (40300), 服务器内部异常 (50000), 你可以添加自定义的一些专属你自己项目的响应状态码,例如: API 项目 接口调用失败, 可以是 INTERFACE_ERROR(50003,"接口调用失败")。

2.4 配置类

JsonConfig、Knife4jConfig、MyBatisPlusConfig、CorsConfig、CosClientConfig、WxOpenConfig

下面是 JsonConfig 的介绍:

@JsonComponent 作用: 自定义序列化和反序列 JSON 数据,Spring Boot 默认使用 JackSon 进行序列化和反序列化。

怎么防止丢失? 用 @Bean 覆盖组件后,重写逻辑代码,将包装类 Long 和基础数据类型 long 转化成字符串序列化成字符串防止在序列化的时候丢失精度。

精度丢失场景 :id 在数据库是 BigInteger 类型,雪花算法生成 id 大于 17 位,因此在序列化的时候会产生精度丢失。

下面是 Knife4jConfig 的介绍:

Knife4jConfig 用于后端接口在线测试的配置类。

图中 @Profile 用于指定在什么环境配置,和配置文件的 spring.profiles.active 是相互关联的。因此只在开发环境和测试环境中生效。

basePackage: 用于指定要扫描 Controller 层的包, 如果你的控制层的包名有所不同,需要进行修改,Knife4j 才能生效。

下面是 MyBatisPlusConfig 的介绍:

@MapperScan 用于指定扫描的路径,如果你的项目的基础包名路径不同,需要修改为你自己的。

这边是用 @Bean 进行组件的注入,然后添加了分页插件。

MyBatisPlus 还有很多插件,例如:乐观锁插件、多租户插件、动态表明插件、数据权限插件等等。可以去官网查看。

下面是 CorsConfig 的介绍:

CorsConfig 用来解决全局跨域配置问题,可以指定请求方法、是否允许发送 Cookie、放行哪些特定域名或 ip、允许哪些请求头。

下面是 CosClientConfig 的介绍:

直接将你的 accessKey、secretKey、region、bucket 进行替换即可,在 application.yml 中做替换,然后配合工具类即可使用对象云存储的功能。

下面是 WxOpenConfig 的介绍:

在微信开放平台获取 appId、appSecret、等配置后,在 applicaiton.yml 中替换即可。

2.5 全局异常处理

BusinessException、GlobalExceptionHandler 和 ThrowUtils

下面是 BusinessException 的介绍:

code:错误码,message 因为继承了父类 RunTimeException,因此就有属性 message。 结合 ErrorCode 使用

下面是 GlobalExceptionHandler 的介绍:

@RestControllerAdvice 注解是 @ControllerAdvie 和 @ResponseBody 注解的组合,先捕获整个应用程序中抛出的异常,然后将异常处理方法的返回值将自动转换为 HTTP 响应的主体。

@ExceptionHandler 注解用于指定什么异常需要被捕获。

下面是 ThrowUtils 的介绍:

一般用于请求参数的校验,如果请求参数为空,直接抛出业务异常,然后指明错误码 ErroCode 和 message 错误信息。

2.6 数据库和 ES 同步

IncSyncPostToEs 和 FullSyncPostToEs

下面是 IncSyncPostToEs 的介绍:

@Component 注解: 如果取消注解,就将这个定时任务加入到 Spring 容器中,Spring Boot 启动类启动后将会开启这个定时任务。

@Scheduled: Spring Boot 的定时任务控制的注解,这里用于每分钟执行同步帖子的逻辑。

应用场景:

1. 想要统计 Top10 的接口调用次数 (API 接口), 在数据库量大后,每个用户去发送请求获取 Top10 的接口调用次数会造成数据库请求压力过大,此时可以写个定时任务,可以定时 24 小时,每天将 Top10 的接口调用次数同步到 Redis 存储,以接口名称和键以接口调用次数为值保存即可。实时性要求不太强的功能,可以采用定时任务。

2. 某个 API 接口不用用户传参,而且大多数时间回复的调用结果都是相通的,那么就可以采取定时任务,将这些不用用户传参,并且调用结果都是相同的接口定时同步到 Redis 存储,相对于数据库的 IO 读取,Redis 存储会大大提升这些接口的 QPS,可以自己在简历上进行量化处理。

2.7 工具类

NetUtils、SpringContextUtils、SqlUtils

下面是 NetUtils 的介绍:

主要用于获取客户端的 IP 地址

下面是 SpringContextUtils 的介绍:

用于通过名称、类型、名称和类型获取 Spring 上下文的容器。

下面是 SqlUtils 的介绍:

主要用于检查 SQL 注入问题

全文完
本文由 简悦 SimpRead 转码,用以提升阅读体验,原文地址