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

news2024/10/5 14:05:48

一. 模块简介

  • 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.coloradmin.cn/o/1858744.html

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

相关文章

企业邮箱老板如何看员工邮件往来记录

员工离职,删除邮箱内重要邮件?已删除的邮件能否恢复?企业邮箱老板如何查看员工邮件的往来记录呢?本篇文章将为您详细介绍企业邮件自动备份的原理以及邮箱内的设置方法。 一、为何查看员工邮件往来记录? 企业邮箱关乎…

了解SD-WAN与传统WAN的区别

近年来,许多企业选择了SD-WAN作为他们的网络解决方案。云基础架构的SD-WAN不仅具备成本效益,而且提供更安全、更可靠的WAN连接,有助于实现持续盈利。客户能够更好地控制他们的网络,个性化定制且无需额外成本。 那么,为…

第二十八篇——复盘:世界不完美,我们该怎么办?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 对于信息传递过程中的相关知识的总结,让我又仿佛回到了每一个…

猫头虎 分享已解决Error || API Rate Limits: HTTP 429 Too Many Requests

猫头虎 分享已解决Error || API Rate Limits: HTTP 429 Too Many Requests 🐯 摘要 📄 大家好,我是猫头虎,一名专注于人工智能领域的博主。在AI开发中,我们经常会遇到各种各样的错误,其中API Rate Limits…

多路h265监控录放开发-(15)回放页面中的三个槽函数进行视频的录放(0.1版本项目完结篇)

xviewer.h 中的回放页面的三个槽函数: void SelectCamera(QModelIndex index);//选择摄像机129void SelectDate(QDate date); //选择日期129void PlayVideo(QModelIndex index); //选择时间播放视频129 SelectCamera槽函数解析: 点击相机列表日…

【路由交换技术】Cisco Packet Tracer基础入门教程(四)

Hello各位,好久不见,第四期我准备讲一下Packet Tracer中DHCP的配置,使用方法。 本章实验我们将拓扑中的某个路由器作为DHCP服务器(它仍然可作为路由器使用),通过命令配置DHCP服务。独立的服务器可通过图形化…

【AI大模型】GPTS 与 Assistants API

前言 2023 年 11 月 6 日,OpenAI DevDay 发表了一系列新能力,其中包括:GPT Store 和 Assistants API。 GPTs 和 Assistants API 本质是降低开发门槛 可操控性和易用性之间的权衡与折中: 更多技术路线选择:原生 API、…

创新指南|品牌电商新策略:五大转型思路与RGM举措

在流量红利过去的背景下,品牌电商面对多渠道运营的难题,如缺乏统盘经营、绩效管理分散、价格战失控、用户体验不足以及流量过度依赖,品牌电商如何有效应对这些挑战,本文从5个维度探讨全渠道电商RGM破局之路,实现品牌的…

利用chrome_remote_interface实现程序化、自动化Web安全测试

2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客跳槽涨薪的朋友们有福了,今天给大家推荐一个软件测试面试的刷题小程序。https://blog.c…

MOE学习笔记

MOE网络结构 和传统的 transformer 网络结构相比,我们将 Transformer 模型的每个 FFN 层替换为 MoE 层,MoE 层由门网络(Router)和一定数量的专家(Expert)组成。 这些 Expert 其实也是 FFN 层,…

LeetCode 算法:二叉树的直径 c++

原题链接🔗:二叉树的直径 难度:简单⭐️ 题目 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由…

审美进阶:7个小程序模板,助你提高设计感!

小程序是一种无需下载和安装即可使用的应用程序。小程序实现了应用程序“触手可及”的梦想。用户可以通过扫描或搜索打开应用程序。对于开发者来说,小程序也大大降低了开发成本。因此,越来越多的品牌争相制作小程序应用程序。本文将为您带来优秀的微信小…

ESP32-S3方案应用设备无线交互技术,产品远程控制与语音交互

在物联网和人工智能(AI)技术融合的浪潮中,ESP32-S3芯片以其卓越的性能和多功能性,成为智能家居和工业自动化领域的明星产品。 ESP32-S3是一款基于Xtensa LX6处理器的嵌入式系统级芯片,具有高效、低功耗的特点。集成的Wi-Fi和蓝牙功能&#x…

结合人工智能的在线教育系统:开发与实践

人工智能(AI)正在革新各行各业,教育领域也不例外。结合AI技术的在线教育系统能够提供个性化的学习体验、智能化的教学辅助和高效的数据分析,从而大大提升教育质量和学习效果。本文将探讨结合AI技术的在线教育系统的开发与实践&…

【数据结构】比较顺序表和链表的区别(优缺点),细讲CPU高速缓存命中率

目录 一、顺序表和链表的区别【表格】 二、顺序表优缺点 三、链表优缺点 四、缓存命中率(缓存利用率) ❥ 主存和本地二级存储 ❥ 寄存器和三级缓存 ❥ 顺序表缓存命中率 ❥ 链表缓存命中率 一、顺序表和链表的区别【表格】 不同点顺序表链表&am…

【十二】图解 Spring 核心数据结构:BeanDefinition

图解 Spring 核心数据结构:BeanDefinition 简介 使用spring框架的技术人员都知道spring两个大核心技术IOC和AOP,随着投入更多的时间去学习spring生态,越发觉得spring的发展不可思议,一直都是引领着Java EE的技术变革,这…

MySQL之可扩展性(一)

可扩展性 概述 有些应用仅仅适用于一台或少数几台服务器,那么哪些可扩展性建议是和这些应用相关的呢?大多数人从不会维护超大规模的系统,并且通常也无法效仿在主流大公司所使用的策略。选择一个合适的策略能够大大地节约时间和金钱。 MySQL…

ONLYOFFICE 桌面编辑器8.1---一个高效且强大的办公软件

软件介绍 ONLYOFFICE 桌面编辑器经过不断的更新换代现在迎来了,功能更加强大的ONLYOFFICE 桌面编辑器8.1是一个功能强大的办公套件,专为多平台设计,包括Windows、Linux和macOS。它提供了一套全面的办公工具,包括文档处理、电子表…

IO-Iink事件

IO-LINK事件功能 IO-Link的事件功能是其通信协议中的一项重要特性,主要用于传输设备的故障信息和维护信息。IO-Link支持三种数据类型:过程数据、参数数据和事件数据。其中,事件数据就是用于此目的。 当IO-Link设备(如传感器或执…

大咖共话|智领未来,数字化革新生命健康产业

在数字化浪潮席卷全球的今天,生命健康产业正迎来前所未有的发展机遇。6月20日,“第三届滨海中关村协同创新发展交流会”在北京隆重举办,唯迈医疗与业界大咖齐聚一堂,在“数字化赋能驱动生命健康产业发展”圆桌论坛上,共…