Java知识点整理 11 — 后端 Spring Boot 初始化模板使用

请结合资源目录中的 Spring Boot 初始化模板使用。

一. 模块简介

  • annotation:自定义注解
  • aop:请求日志和权限校验
  • common:通用类
  • config:配置类
  • constant:常量 
  • controller:控制层
  • esdao:方便操作ES
  • exception:异常类
  • job:定时任务、增量备份等
  • manager:管理类:AI模型、GuaVa限流器
  • mapper:用于复杂SQL
  • model:包括DTO、VO、Domain
  • service:接口和实现类,经常用于注入
  • utils:工具类
  • wxmp:微信工具类
  • MainApplication:Spring Boot 启动类

  •  META-INF:SpringBoot 自动配置
  • application.yml:开发环境配置
  • application-prod.yml:生产环境配置
  • application-test.yml:测试环境配置
  • banner.txt:Spring Boot 启动 展示banner.txt中内容

二. 核心模块解析

1. 全局项目配置

application.yml

数据库配置是必须要修改的,通常改成自己的库名,用户名与密码。

如果使用到Redis,需要替换成自己的Redis数据库的密码,并移除 Spring Boot 启动类中 exclude 的内容(它用于排除 RedisAutoConfiguration 类的自动配置):

2. 全局请求、鉴权拦截器

 AuthInterceptor 权限校验机制,用于判断用户的 role 是否为管理员、用户、封号三种状态:

比如创建用户方法仅为管理员使用,使用 @AuthCheck 自定义注解,并标注管理员权限即可。

在权限校验机制中,使用了 @Around 注解,即环绕通知。它允许在目标方法执行的前后都进行自定义的操作,也就是在带有 @authCheck 注解的方法执行前后进行权限校验。@Around环绕通知是AOP功能的诠释。

LogInterceptor请求日志拦截器,用于输出请求日志:

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

3. 通用响应类

BaseResponse、ResultUtils 和 ErroCode。

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

ResultUtils:

用于简化 BaseResponse 的操作,将成功或失败的一些通用情况进行静态方法的封装,方便调用。比如调用 success 方法,响应状态码为0,然后会将data封装到 BaseResponse 的data属性,message为"ok"。响应状态码可以自主修改。

ErrorCode:

 ErrorCode配合ResultUtils使用,可以定义枚举类,将常规的响应状态码和响应信息进行封装。也可以自定义响应状态码,如API项目接口调用失败,可以定义 INTERFACE_ERROR(50003,"接口调用失败")。

4. 配置类

JsonConfig、MyBatisPlusConfig、CorsConfig、CosClientConfig、WxOpenConfig。

JsonConfig:

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

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

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

MyBatisPlusConfig:

@MapperScan 用于扫描指定路径,此处可以替换为自己的基础包名路径。

使用@Bean 进行组件注入,然后添加分页插件。

此外,MyBatisPlus还有很多插件,比如乐观锁插件、数据权限插件等。

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

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

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

 5. 全局异常处理

BusinessException、GlobalExceptionHandler和ThrowUtils。

BusinessException:

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

常用第二个方法  BusinessException(ErrorCode errorCode, String message)

GlobalExceptionHandler:

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

@ExceptionHandler 注解用于标注哪种异常需要被捕获。

ThrowUtils:

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

6. 数据库和 ES 同步 

IncSyncPostToEs 和 FullSyncPostToEs

IncSyncPostToEs:

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

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

应用场景:

  1. 想要统计Top10的接口调用次数,在数据库量大后,如果每个用户去发送请求获取Top10接口调用次数,会对数据库造成巨大的请求压力。因此可以写一个定时任务,假设定时24小时,每天将Top10的接口调用次数同步到Redis缓存中,以接口名称为键、调用次数为值保存。对实时性要求不高的功能可以采用定时任务。
  2. 某个API接口不需要用户传参,而且大多数时间回复的调用结果都是相通的。那么可以采用定时任务,将这些接口定时同步到Redis存储,提升接口的QPS。

7. 工具类

NetUtils、SpringContextUtils、SqlUtils。

NetUtils:主要用于获取客户端 IP 地址。

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

SqlUtils:主要用于监测SQL注入问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Phoenixxxxxxxxxxxxx

感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值