Java知识点整理 11— 后端 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注入问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook广告投放的6个误区,老手也会犯

一、没有目标 无论是投放哪种产品,我们始终都需要明确,广告的目标是什么。 因为Facebook广告的形式和类型,也经常会有变化,例如近期Facebook推出的360视频广告,以及之后即将推出的LIVE,Mid-Roll视频插播广…

美国电商选品、大促、趋势、案例,掌慧科技首期NewsBreak沙龙干货满满

今年第一季度,美国电商销售额达到了2681.2亿美元,相较上一年同期的2471.8亿美元增长8.5%。同时,该季度美国电商销售额在零售业总销售额中的占比为22.2%,高于上一年同期的21.2%。美国在2023年下半年通胀得到良好控制,20…

CleanMyMac2024破解版下载链接!你的Mac清洁利器!

嘿,亲爱的朋友们,今天我要跟大家分享一款我最近超级依赖的电脑清理神器—CleanMyMac2024破解版!如果你还在为电脑运行缓慢、存储空间不够而烦恼,那你一定不能错过它! 🔥 为什么选择CleanMyMac2024破解版&am…

声波的种类

声波可以根据不同的特性进行分类,主要包括频率和传播方式两个方面: ### 按频率分类: 1. **次声波**:频率低于20Hz的机械波,这类波通常不能被人耳感知。 2. **可闻声波**:频率在20Hz至20kHz之间的机械波&am…

C++ | Leetcode C++题解之第160题相交链表

题目: 题解: class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {if (headA nullptr || headB nullptr) {return nullptr;}ListNode *pA headA, *pB headB;while (pA ! pB) {pA pA nullptr ? headB : p…

【fiddler】fiddler抓取websocket

1.先了解websocket流 下载4.5版本以上的fiddler 如图所示:在rules--customize rules 里面插入以下代码: static function OnWebSocketMessage(oMsg: WebSocketMessage) { // Log Message to the LOG tab FiddlerApplication.Log.LogString(oMsg.ToStr…

鸿蒙开发下拉选项框在表单递交的处理

下拉选项框 <select name"identity"><option value"0">顾 客</option><option value"1">行 政</option><option value"2" >保 洁</option></select>在表单数据中没有找到identit…

Win11 Docker Desktop下部署springboot jar

1.将springboot程序使用maven package打包出jar。 2.创建dockerfile&#xff0c;为了本地打包时方便&#xff0c;这里的dockerfile有小变动。 # Docker Desktop下部署springboot jar FROM openjdk:8 VOLUME /tmp EXPOSE 8601 ARG JAR_FILEtarget/webflux-hello-0.0.1-SNAPSHO…

AVL树插入详解

1.什么是AVL树 二叉搜索树可以提高搜索的效率&#xff0c;但是如果数据有序或者接近有序&#xff0c;就会退化为单边树&#xff0c;查找效率相当于在顺序表中查找数据&#xff0c;时间复杂度会退化到O(n)。AVL树解决了这个问题&#xff0c;通过保证每个节点的左右子树高度之差…

重学java 83.Java注解

As a failure,I met my last sound. —— 24.6.24 一、注解的介绍 1.引用数据类型: 类、数组、接口、枚举、注解 jdk1.5版本的新特性 一个引用数据类型 和类,接口,枚举是同一个层次的 引用数据类型:类、数组、接口、枚举、注解 2.作用: ① 说明&#xff1a;对代码进行说明,生…

elementui组件库实现电影选座面板demo

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Cinema Seat Selection</title><!-- 引入E…

前端中的深拷贝

第1部分&#xff1a;引言 深拷贝&#xff1a;前端开发的隐形守护者 在前端开发的世界里&#xff0c;数据的传递和状态的管理是构建用户界面的基础。然而&#xff0c;数据的复制常常被忽视&#xff0c;直到它引发bug&#xff0c;我们才意识到它的重要性。深拷贝&#xff0c;这…

122.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件物品箱的管理

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测

文章目录 一、文章概览&#xff08;一&#xff09;问题来源&#xff08;二&#xff09;文章的主要工作&#xff08;三&#xff09;相关研究 二、动机&#xff1a;Logits 中缺失的信息&#xff08;一&#xff09;logits&#xff08;三&#xff09;基于零空间的 OOD 评分&#xf…

你还在手动操作仓库?这款 CLI 工具让你效率飙升300%!

前言 作为一名开发者&#xff0c;我经常会在 GitHub 和 Gitee 上 fork 各种项目。时间一长&#xff0c;这些仓库就会堆积如山&#xff0c;变成了“垃圾仓库”。每次打开代码托管平台&#xff0c;看到那些不再需要的仓库&#xff0c;我的强迫症就会发作。手动一个一个删除这些仓…

统计学三学习笔记

一&#xff0c;t分布 二&#xff0c;置信区间 最终要用② n越大&#xff0c;s越小&#xff0c;置信区间越小 三&#xff0c;配对样本t检验 假如有两个族群&#xff1a;

【Godot4自学手册】第四十二节实现拖拽进行物品交换和数量叠加

这一节我们主要学习背包系统中的物品拖拽后&#xff0c;物品放到新的位置&#xff0c;或交换物品位置&#xff0c;如果两个物品属于同一物品则数量相加。具体效果如下&#xff1a; 一、修改item.tscn场景 给item.tscn场景的根节点Item添加Label子节点&#xff0c;命名为Numv…

Linux CentoS安装RabbitMQ:一键安装指南

有两种安装方法&#xff0c;官方推荐使用 docker安装RabbitMQ 一、Docker安装RabbitMQ 1、安装docker 参考我之前的文章&#xff1a;Centos7.5搭建docker并且部署Lnmp环境&#xff08;小白入门docoker&#xff09;_centos7.5安装docker和docker-compose-CSDN博客 2、安装Ra…

【实用软件】Paragon NTFS for Mac 15下载及安装教程

​习惯上来说所有操作只需轻轻一点&#xff1a;轻量级的快捷菜单栏&#xff0c;可访问所有NTFS驱动器并执行最常见的卷操作&#xff0c;如挂载&#xff0c;卸载和验证&#xff0c;从菜单栏中快速启动NTFS for Mac界面&#xff0c;一键点击&#xff0c;更加方便。11510182322410…

Scope XY Project的使用

1.Scope XY Project的功能介绍与使用方法 添加监控变量 绘制成一个三角形 XY进行对调操作 修改XY轴的比例修改显示输出 2.Cursor的使用方法 游标线的添加测量 3.Reporting功能的使用方法 到处对应的报表数据 添加对应的报告数据