# SpringBoot3-PN
**Repository Path**: gitben123/SpringBoot3-PN
## Basic Information
- **Project Name**: SpringBoot3-PN
- **Description**: 基于老杜的SpringBoot3视频搭建的学习项目
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-10
- **Last Updated**: 2025-12-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ssm
### 介绍
项目技术栈:java8、springboot2.5、mybatis-plus3、hutool、baomidou动态数据库、swagger2
redis、ftp、RabbitMq、druid、Prometheus监控、easyexcel、poi、openpdf
数据库:mysql8(测试完善)、postgresql(支持但未测试)、oracle(支持但未测试)
一定要按照本文文档去操作,下文的“准备工作”、“怎么启动”、“导入apifox”,这三部分非常重要,
尽量安装好相关软件(非必须),配置好mysql数据库环境(必须!postgresql和oracle也有适配,但没有测试过,可能会报错),
导入相关的表结构和数据(必须)。 否则项目运行大概率会报错!!!
项目中加入大量日志方便调试,切换环境到
prod可以减少部分日志打印。
### 准备工作
尽量安装以下软件,当然不安装也可以正常启动,只是相关组件功能会用不了:
ftp、prometheus和Grafana、erlang和RabbitMq、redis和rdm,
下面提供windows版百度网盘链接:
https://pan.baidu.com/s/1sz517TO_McBx9AuG18n8qw?pwd=2u5c 提取码: 2u5c
如果图片显示不了,需要去安装IDEA的一个插件markdown editor,然后点击底部,从
markdown split editor选项切换到markdown editor即可
### 怎么启动
1. 确保mysql服务已经启动且可以访问数据库
2. 找到 SqlRunnerMain类,配置好url和账号密码,直接运行main方法

3. 找到application-dev.yml文件,配置好url和账号密码

4. 运行启动类SsmApplication

5. (可选)安装windows版redis且启动redis服务,否则会采用降级登录方式
6. (可选)安装windows版RabbitMq且启动RabbitMq服务,否则mq会失效
### 导入apifox
找到根目录下apifoxJson文件夹下面的test.apifox.json文件,
导入到apifox或postman中,用来模拟前端发送请求
### 功能简介
#### 登录
登录时生成AES加密后的token,除了登录接口和其他一些特殊接口外,发请求时
请求头必须要携带token,以便后端进行校验

#### 发起其他请求


#### 模仿Mybatisplus的自动代码生成类
找到GenMySqlCode,配置好信息可自动生成代码,生成通用增删改查、导入和导出(基于easyexcel)
接口

#### 自实现表测试数据生成工具类
找到PureJdbcTestDataGenerator,
配套的词库配置在resources 目录下的lexicon_config.properties,
main方法入口出配置好需要生成测试数据的表名和测试数据条数,可配置多个。
首次运行会在项目根目录下生成 表名_config.txt配置文件,根据详细说明理解清楚
各项配置后,根据需要调整配置信息,再次运行main方法即可




#### 自实现表定时备份DDL及其数据类
在task目录下找到TableExportScheduledTask定时任务类,配置文件中
```yaml
export:
backupSQL: D:/sql_exports
backupSQLMaxRows: -1 # 每个表导出的数据条数,-1 表示导出全部,>0 表示导出指定条数,默认 100
rowsPerFile: 1000
paginationType: new # 或 old sql备份分页类型
```
#### 注入pdf生成器来导出pdf
找到PdfGenerator,直接运行main方法可以生成pdf样板。具体用法参考TestPdfGenerator,
后续需要生成自定义pdf只需复制粘贴PdfGenerator,在其基础上修改即可
pdf可添加水印、盖章和页码


注意修改生成器中的必要参数

#### 自定义sql打印拦截器和日志定制切面类
找到 SqlPrintInterceptor,该类会打印大量sql调试日志;
找到 LoggingAspect,该类会打印请求头,请求体,响应体等详细信息。
在各个环境配置文件中找到
```yaml
#自定义sql详细日志打印和请求头、响应结果日志打印开关
myLog:
sqlPrint:
enable: false
aroundLog:
enable: false
```
来控制是否生效
#### 引入swagger2
项目启动后浏览器输入 http://localhost:8080/swagger-ui.html#/
即可查看接口api文档

#### 引入springboot集成javaMail依赖
详情见application.yml的mail部分配置,username为qq邮箱发件人的邮箱账号,password为授权码
##### 授权码获取步骤:
1. 登录 QQ 邮箱网页版
2. 点击页面右上角 【设置】
3. 进入 【账户】 选项卡
4. 找到 “POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务” 一栏
5. 查看 SMTP 服务 是否已开启:
如果显示 “未开启”,点击 “开启”,
系统会要求你 验证手机号,按照提示发送短信,
验证成功后,会生成一个 16 位 SMTP 授权码
6. 把这个 16 位授权码保存好!以后你在程序中配置 SMTP 密码时,就填它,而不是 QQ 密码!
##### 登录用户设置邮箱:
h5_userinfo表的备用字段param3为用户邮箱,填入该用户的qq邮箱即可在登录后收到邮件


#### 引入druid数据源
项目启动后浏览器输入 http://localhost:8080/druid/
可访问数据库监控后台,登录账号密码见配置文件(默认admin/123456)

#### 引入Prometheus和grafana集成JVM监控后台
###### Prometheus安装
1. 解压
2. 修改prometheus.yml文件中scrape_configs:为
```yaml
scrape_configs:
- job_name: 'spring-boot-app'
metrics_path: '/actuator/prometheus' # 必须是这个路径
static_configs:
- targets: ['localhost:8080'] # 你的 Spring Boot 应用地址
```
3. 点击prometheus.exe运行prometheus服务。
4. 登录Grafana面板后,浏览器输入 http://localhost:3000
5. 连接->数据源->Connection:Prometheus server URL 处填入 http://localhost:9090
6. 点击保存并测试
7. 首页的同一行,右侧点击 + 号,导入仪表板,输入4701,加载模版,选择数据库后即可
###### grafana安装
1. 点击msi安装
2. 浏览器输入 http://localhost:3000
3. 设置中文:
在 grafana默认配置 grafana安装目录/conf/defaults.ini 中,将default_language = en-US改为 zh-Hans即可
4. 重新登录
###### 启动
安装并且设置完prometheus和Grafana后,先启动项目,再启动prometheus
然后浏览器输入 http://localhost:3000,登录Grafana后台,账号密码都是admin



#### 引入RabbitMq
###### erlang安装和RabbitMq安装
1. 先安装erlang
2. 配置erlang环境变量,path路径配置到erlang的bin目录
3. rabbitMq安装后,到D:\RabbitMQ\rabbitmq_server-3.7.9\sbin目录下cmd
4. 输入rabbitmq-plugins enable rabbitmq_management
5. 最后出现started 3 plugins即成功
###### 启动
项目启动后浏览器输入 http://localhost:15672/
可访问RabbitMq后台,登录账号密码见配置文件(默认guest/guest)

###### 服务降级
如果没安装RabbitMQ或RabbitMQ服务中断,mq相关功能自动屏蔽,不需重启项目

当RabbitMQ服务恢复时,mq相关功能隔一段时间(由配置参数决定)自动恢复,不需重启项目


#### 引入redis
###### redis安装
打开windows版redis的安装目录,找到
redis.windows.conf 和 redis.windows-service.conf
在最后一行添加
requirepass 123
那么密码就是123
然后win键+r,输入services.msc,找到redis服务重启

###### redis说明
自定义实现通用方法,基于RedisService类,另外新建一个RedisServiceWithFallback类,包装
了RedisService,实现降级容灾的功能。当redis连接不上时,会启用降级处理,去查数据库而不是
redis
###### redis停机后的降级处理
win键+r,输入services.msc,找到redis且关掉redis服务后,启动项目


#### 引入自定义日志
LoggingAspect使用日志切面,主要打印请求头、请求体、响应内容、响应时间等参数。
同时日志会被持久化到本地
#### 引入多环境配置
分为dev、test和prod,prod不会打印自定义sql日志
#### 引入全局异常处理
GlobalExceptionHandler
#### 后续更新计划
1. 上传一个图片到后端,自动识别其中的英文,并且翻译为中文文本
2. 测试数据生成器,增加 可设置主表和子表同时添加随机数据,主外键数据字段数据相同
3. pdf基于模板导出增加选用JasperReports
4. 尝试写一套流程,模拟双方证书文件和私钥文件,加密报文传送,接受报文解密后返回,
报文格式同时实现xml和json,涉及数字签名,验签,同时实现http传输和socket传输,
(已实现,待实现子模块)
肯定需要多加一个类似处理报文的子模块。该报文系统基于诺依框架搭建,主要用作报文的
发送、 接收、展示
报文组成:message_id: 报文唯一标识符(UUID)、timestamp: 时间戳(发送时间)、encoding: 编码格式(如UTF-8)
、msg_type: 报文类型(不同类型表示报文内容组成不同,即字段不同)、payload: 实际业务数据(JSON/XML格式)、content: 报文内容、
attachment: 附件信息(base64编码)、status: 报文状态(新建/已发送/已接收/处理完成)
retry_count: 发送重试次数、ack_required: 是否需要回执