You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
480 lines
21 KiB
480 lines
21 KiB
|
1 month ago
|
# 核心配置
|
||
|
|
|
||
|
|
<cite>
|
||
|
|
**本文引用的文件**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
- [application.yml](file://crm-app/src/main/resources/application.yml)
|
||
|
|
</cite>
|
||
|
|
|
||
|
|
## 目录
|
||
|
|
1. [简介](#简介)
|
||
|
|
2. [项目结构](#项目结构)
|
||
|
|
3. [核心组件](#核心组件)
|
||
|
|
4. [架构总览](#架构总览)
|
||
|
|
5. [详细组件分析](#详细组件分析)
|
||
|
|
6. [依赖关系分析](#依赖关系分析)
|
||
|
|
7. [性能考虑](#性能考虑)
|
||
|
|
8. [故障排查指南](#故障排查指南)
|
||
|
|
9. [结论](#结论)
|
||
|
|
10. [附录](#附录)
|
||
|
|
|
||
|
|
## 简介
|
||
|
|
本章节聚焦于项目的核心配置模块,涵盖以下关键能力:
|
||
|
|
- MyBatis Plus 集成与扩展(分页、元对象填充、自定义 ID 生成器)
|
||
|
|
- Redis 缓存连接与序列化配置
|
||
|
|
- Jackson JSON 序列化定制(日期、空值、时区等)
|
||
|
|
- Knife4j API 文档的启用与访问路径
|
||
|
|
- 雪花算法 ID 生成器的配置与使用
|
||
|
|
- 跨域(CORS)配置
|
||
|
|
- 高级扩展点:元对象填充处理器、自定义 ID 生成器
|
||
|
|
|
||
|
|
该文档旨在帮助开发者快速理解并正确配置上述模块,同时提供参数说明、默认值建议与扩展方法指引。
|
||
|
|
|
||
|
|
## 项目结构
|
||
|
|
核心配置集中在 crm-base 模块的 config 包中,应用入口在 crm-app 模块的 application.yml 中进行统一装配。下图展示了核心配置类之间的依赖与协作关系。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
graph TB
|
||
|
|
A["应用启动<br/>application.yml"] --> B["MyBatis Plus 配置<br/>MybatisPlusConfig"]
|
||
|
|
A --> C["Redis 配置<br/>RedisConfig"]
|
||
|
|
A --> D["Jackson 配置<br/>JacksonConfig"]
|
||
|
|
A --> E["Knife4j 配置<br/>Knife4jConfig"]
|
||
|
|
A --> F["跨域配置<br/>CorsConfig"]
|
||
|
|
B --> G["雪花ID生成器<br/>SnowflakeIdWorker"]
|
||
|
|
B --> H["自定义ID生成器<br/>CustomIdGenerator"]
|
||
|
|
B --> I["元对象填充处理器<br/>MetaObjectFillHandler"]
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [application.yml](file://crm-app/src/main/resources/application.yml)
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [application.yml](file://crm-app/src/main/resources/application.yml)
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
|
||
|
|
## 核心组件
|
||
|
|
本节对核心配置进行概览性说明,后续章节将逐一展开。
|
||
|
|
- MyBatis Plus 配置:注册分页插件、全局策略、元对象填充处理器、自定义 ID 生成器。
|
||
|
|
- Redis 配置:连接信息、序列化策略、序列化超时、键前缀等。
|
||
|
|
- Jackson 配置:日期格式与时区、空值处理、枚举序列化、反序列化容错。
|
||
|
|
- Knife4j 配置:API 文档开关、分组、访问路径、安全策略。
|
||
|
|
- 雪花算法 ID:分布式唯一 ID 生成,支持数据中心与机器位分配。
|
||
|
|
- 跨域配置:允许的源、方法、头、凭证与预检缓存。
|
||
|
|
- 元对象填充:自动填充创建时间、更新时间、操作人等字段。
|
||
|
|
- 自定义 ID 生成器:基于雪花或业务规则生成主键。
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
|
||
|
|
## 架构总览
|
||
|
|
下图展示了一次典型的请求从进入 Spring MVC 到数据持久化的过程中,各配置组件如何协同工作。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
sequenceDiagram
|
||
|
|
participant Client as "客户端"
|
||
|
|
participant Web as "Spring MVC"
|
||
|
|
participant MP as "MyBatis Plus"
|
||
|
|
participant Fill as "元对象填充处理器"
|
||
|
|
participant IdGen as "自定义ID生成器"
|
||
|
|
participant Snow as "雪花算法"
|
||
|
|
participant DB as "数据库"
|
||
|
|
Client->>Web : "HTTP 请求"
|
||
|
|
Web->>MP : "调用 Mapper/Service"
|
||
|
|
MP->>IdGen : "生成主键(可选)"
|
||
|
|
IdGen->>Snow : "计算分布式ID"
|
||
|
|
Snow-->>IdGen : "返回ID"
|
||
|
|
MP->>Fill : "填充审计字段"
|
||
|
|
Fill-->>MP : "填充完成"
|
||
|
|
MP->>DB : "执行 SQL"
|
||
|
|
DB-->>MP : "结果集"
|
||
|
|
MP-->>Web : "返回实体/分页"
|
||
|
|
Web-->>Client : "JSON 响应(Jackson)"
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
|
||
|
|
## 详细组件分析
|
||
|
|
|
||
|
|
### MyBatis Plus 配置
|
||
|
|
- 功能要点
|
||
|
|
- 注册分页插件,统一分页行为。
|
||
|
|
- 设置全局策略(逻辑删除、驼峰映射、字段策略等)。
|
||
|
|
- 注入元对象填充处理器,实现审计字段自动填充。
|
||
|
|
- 注入自定义 ID 生成器,为实体主键提供分布式唯一 ID。
|
||
|
|
- 关键扩展点
|
||
|
|
- 分页插件:可配置拦截器顺序、方言等。
|
||
|
|
- 全局策略:是否开启驼峰命名、是否启用逻辑删除、插入/更新策略。
|
||
|
|
- 元对象填充:按字段名或注解匹配,支持获取当前登录用户信息。
|
||
|
|
- 自定义 ID:实现 ID 生成接口,结合雪花算法或业务规则。
|
||
|
|
- 常见参数与默认值
|
||
|
|
- 分页插件:默认页码 1、每页大小 10、最大每页大小限制(可按需调整)。
|
||
|
|
- 全局策略:驼峰映射默认开启;逻辑删除字段默认 false。
|
||
|
|
- 填充处理器:默认填充 create_time、update_time、create_by、update_by 等。
|
||
|
|
- ID 生成器:默认使用雪花算法,支持数据中心与机器位配置。
|
||
|
|
- 自定义扩展方法
|
||
|
|
- 新增填充规则:在填充处理器中增加条件判断与赋值逻辑。
|
||
|
|
- 替换 ID 生成器:实现 ID 生成接口并替换 Bean。
|
||
|
|
- 扩展分页:自定义分页拦截器或封装通用分页查询方法。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
classDiagram
|
||
|
|
class MybatisPlusConfig {
|
||
|
|
+注册分页插件()
|
||
|
|
+设置全局策略()
|
||
|
|
+注入填充处理器()
|
||
|
|
+注入自定义ID生成器()
|
||
|
|
}
|
||
|
|
class MetaObjectFillHandler {
|
||
|
|
+填充创建时间()
|
||
|
|
+填充更新时间()
|
||
|
|
+填充操作人()
|
||
|
|
}
|
||
|
|
class CustomIdGenerator {
|
||
|
|
+生成ID()
|
||
|
|
}
|
||
|
|
class SnowflakeIdWorker {
|
||
|
|
+nextId()
|
||
|
|
}
|
||
|
|
MybatisPlusConfig --> MetaObjectFillHandler : "注入"
|
||
|
|
MybatisPlusConfig --> CustomIdGenerator : "注入"
|
||
|
|
CustomIdGenerator --> SnowflakeIdWorker : "使用"
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
|
||
|
|
### Redis 缓存配置
|
||
|
|
- 功能要点
|
||
|
|
- 配置连接地址、端口、密码、数据库索引。
|
||
|
|
- 设置序列化策略(键、值、Hash 键值等),推荐 JSON 序列化。
|
||
|
|
- 配置连接池、超时、重试与异常处理。
|
||
|
|
- 关键参数与默认值
|
||
|
|
- 连接:host、port、password、database(默认 0)。
|
||
|
|
- 序列化:key 使用字符串序列化,value 使用 JSON 序列化。
|
||
|
|
- 超时:连接超时、序列化超时、命令超时(毫秒)。
|
||
|
|
- 连接池:最大连接数、最小空闲、最大空闲、获取连接超时。
|
||
|
|
- 自定义扩展方法
|
||
|
|
- 自定义序列化器:实现序列化接口以适配特定类型。
|
||
|
|
- 缓存键前缀:通过 KeyPrefix 统一管理命名空间。
|
||
|
|
- 缓存失效策略:TTL 与热点数据保护。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
flowchart TD
|
||
|
|
Start(["初始化Redis"]) --> Connect["建立连接"]
|
||
|
|
Connect --> Serialize["配置序列化策略"]
|
||
|
|
Serialize --> Pool["配置连接池"]
|
||
|
|
Pool --> Timeout["配置超时与重试"]
|
||
|
|
Timeout --> Ready["就绪"]
|
||
|
|
Ready --> Use["业务使用缓存"]
|
||
|
|
Use --> Close["关闭连接"]
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
|
||
|
|
### Jackson 序列化配置
|
||
|
|
- 功能要点
|
||
|
|
- 统一日期格式与时区,避免前后端不一致。
|
||
|
|
- 控制空值序列化策略(忽略 null、输出空串等)。
|
||
|
|
- 枚举序列化为字符串或指定字段。
|
||
|
|
- 反序列化容错:忽略未知字段、严格模式开关。
|
||
|
|
- 关键参数与默认值
|
||
|
|
- 日期格式:默认 ISO 8601 或自定义 pattern。
|
||
|
|
- 时区:默认系统时区或 UTC。
|
||
|
|
- 空值:默认忽略 null 字段。
|
||
|
|
- 枚举:默认 toString 或 name。
|
||
|
|
- 自定义扩展方法
|
||
|
|
- 自定义序列化器:针对复杂对象或敏感字段脱敏。
|
||
|
|
- 全局过滤器:统一过滤掉某些字段。
|
||
|
|
- 反序列化器:兼容历史版本字段变更。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
classDiagram
|
||
|
|
class JacksonConfig {
|
||
|
|
+配置ObjectMapper()
|
||
|
|
+注册模块()
|
||
|
|
+设置日期格式()
|
||
|
|
+设置空值策略()
|
||
|
|
+配置枚举序列化()
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
|
||
|
|
### Knife4j API 文档配置
|
||
|
|
- 功能要点
|
||
|
|
- 启用 Knife4j 文档界面。
|
||
|
|
- 配置分组与扫描包路径。
|
||
|
|
- 设置访问路径与安全策略(如鉴权)。
|
||
|
|
- 关键参数与默认值
|
||
|
|
- 开关:enable=true/false。
|
||
|
|
- 分组:default、auth、system 等。
|
||
|
|
- 访问路径:/doc.html 或自定义。
|
||
|
|
- 安全:Bearer Token、Basic Auth 等。
|
||
|
|
- 自定义扩展方法
|
||
|
|
- 动态分组:根据模块加载情况动态添加分组。
|
||
|
|
- 文档增强:添加额外描述、示例、错误码。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
flowchart TD
|
||
|
|
Enable["启用Knife4j"] --> Group["配置分组与扫描"]
|
||
|
|
Group --> Path["设置访问路径"]
|
||
|
|
Path --> Security["配置安全策略"]
|
||
|
|
Security --> Access["浏览器访问 /doc.html"]
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
|
||
|
|
### 雪花算法 ID 生成器
|
||
|
|
- 功能要点
|
||
|
|
- 生成 64 位分布式唯一 ID,包含时间戳、数据中心、机器位、序列号。
|
||
|
|
- 支持时钟回拨检测与补偿。
|
||
|
|
- 可通过配置调整数据中心与机器位。
|
||
|
|
- 关键参数与默认值
|
||
|
|
- 数据中心位:默认 5 位(0-31)。
|
||
|
|
- 机器位:默认 5 位(0-31)。
|
||
|
|
- 序列号位:默认 12 位(0-4095)。
|
||
|
|
- 起始时间:默认服务启动时间或固定基准时间。
|
||
|
|
- 使用方式
|
||
|
|
- 在实体主键字段上标注注解,交由 MyBatis Plus 自动填充。
|
||
|
|
- 或通过工具类直接调用 nextId 生成。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
classDiagram
|
||
|
|
class SnowflakeIdWorker {
|
||
|
|
+nextId() long
|
||
|
|
-数据中心位
|
||
|
|
-机器位
|
||
|
|
-序列号位
|
||
|
|
-起始时间
|
||
|
|
}
|
||
|
|
class CustomIdGenerator {
|
||
|
|
+generate(entity, property) Serializable
|
||
|
|
}
|
||
|
|
CustomIdGenerator --> SnowflakeIdWorker : "调用"
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
|
||
|
|
### 跨域配置(CORS)
|
||
|
|
- 功能要点
|
||
|
|
- 允许指定源、方法、头与凭证。
|
||
|
|
- 配置预检请求缓存时间。
|
||
|
|
- 支持通配符与白名单。
|
||
|
|
- 关键参数与默认值
|
||
|
|
- allowedOrigins:默认空或开发环境 *。
|
||
|
|
- allowedMethods:GET/POST/PUT/DELETE/OPTIONS。
|
||
|
|
- allowedHeaders:Content-Type、Authorization 等。
|
||
|
|
- allowCredentials:true/false。
|
||
|
|
- maxAge:预检缓存秒数。
|
||
|
|
- 自定义扩展方法
|
||
|
|
- 动态源校验:根据域名或 IP 白名单放行。
|
||
|
|
- 统一拦截器:记录跨域请求日志。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
flowchart TD
|
||
|
|
Request["前端请求"] --> Check["检查Origin与方法"]
|
||
|
|
Check --> Allowed{"允许?"}
|
||
|
|
Allowed --> |是| Response["返回CORS头"]
|
||
|
|
Allowed --> |否| Deny["拒绝请求"]
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
|
||
|
|
### 元对象填充处理器
|
||
|
|
- 功能要点
|
||
|
|
- 自动填充创建时间、更新时间、创建人、更新人等审计字段。
|
||
|
|
- 支持从安全上下文获取当前用户信息。
|
||
|
|
- 关键参数与默认值
|
||
|
|
- 填充字段:create_time、update_time、create_by、update_by。
|
||
|
|
- 填充时机:INSERT、UPDATE。
|
||
|
|
- 用户来源:SecurityUtils 或 ThreadLocal。
|
||
|
|
- 自定义扩展方法
|
||
|
|
- 新增审计字段:如 tenant_id、dept_id。
|
||
|
|
- 多租户支持:根据登录用户切换租户。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
flowchart TD
|
||
|
|
Entry(["插入/更新"]) --> Detect["检测需要填充的字段"]
|
||
|
|
Detect --> User["获取当前用户"]
|
||
|
|
User --> Fill["填充审计字段"]
|
||
|
|
Fill --> Done(["完成"])
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
|
||
|
|
## 依赖关系分析
|
||
|
|
- 组件耦合度
|
||
|
|
- MyBatis Plus 配置依赖填充处理器与 ID 生成器,形成低耦合高内聚。
|
||
|
|
- Redis 配置独立,仅影响缓存层。
|
||
|
|
- Jackson 配置影响所有 HTTP 响应序列化。
|
||
|
|
- Knife4j 配置与 Controller 扫描相关,不影响业务逻辑。
|
||
|
|
- 外部依赖
|
||
|
|
- MyBatis Plus、Spring Data Redis、Jackson、Knife4j。
|
||
|
|
- 潜在循环依赖
|
||
|
|
- 避免在填充处理器中引入其他配置类导致循环依赖。
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
graph TB
|
||
|
|
MP["MyBatis Plus"] --> Fill["填充处理器"]
|
||
|
|
MP --> IdGen["ID生成器"]
|
||
|
|
IdGen --> Snow["雪花算法"]
|
||
|
|
App["应用"] --> MP
|
||
|
|
App --> Redis["Redis"]
|
||
|
|
App --> Jackson["Jackson"]
|
||
|
|
App --> Knife4j["Knife4j"]
|
||
|
|
App --> CORS["CORS"]
|
||
|
|
```
|
||
|
|
|
||
|
|
**图示来源**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
|
||
|
|
## 性能考虑
|
||
|
|
- MyBatis Plus
|
||
|
|
- 合理使用分页插件,避免全表扫描。
|
||
|
|
- 逻辑删除字段加索引,提升查询效率。
|
||
|
|
- 批量插入/更新减少网络往返。
|
||
|
|
- Redis
|
||
|
|
- 合理设置 TTL,避免内存泄漏。
|
||
|
|
- 使用 Hash 存储结构化数据,减少序列化开销。
|
||
|
|
- 连接池参数调优,避免阻塞。
|
||
|
|
- Jackson
|
||
|
|
- 避免大对象序列化,按需字段输出。
|
||
|
|
- 禁用不必要的模块,降低初始化开销。
|
||
|
|
- Knife4j
|
||
|
|
- 生产环境关闭文档或限制访问。
|
||
|
|
- 合理分组,减少扫描范围。
|
||
|
|
- 雪花算法
|
||
|
|
- 数据中心与机器位规划避免冲突。
|
||
|
|
- 时钟回拨检测与告警。
|
||
|
|
|
||
|
|
[本节为通用指导,不直接分析具体文件]
|
||
|
|
|
||
|
|
## 故障排查指南
|
||
|
|
- MyBatis Plus
|
||
|
|
- 分页无效:检查分页插件是否注册、SQL 是否被拦截。
|
||
|
|
- 填充失败:确认字段名与注解一致,安全上下文是否可用。
|
||
|
|
- ID 生成异常:检查雪花时钟回拨、数据中心/机器位冲突。
|
||
|
|
- Redis
|
||
|
|
- 连接失败:核对 host/port/password/database。
|
||
|
|
- 序列化错误:检查 value 类型是否支持 JSON 序列化。
|
||
|
|
- 超时:调整连接池与超时参数。
|
||
|
|
- Jackson
|
||
|
|
- 日期格式错误:统一 pattern 与时区。
|
||
|
|
- 空指针:配置空值策略或添加 @JsonInclude。
|
||
|
|
- Knife4j
|
||
|
|
- 无法访问:检查 enable 与访问路径。
|
||
|
|
- 鉴权失败:配置正确的安全策略。
|
||
|
|
- CORS
|
||
|
|
- 跨域报错:检查 Origin、Method、Header 与凭证。
|
||
|
|
|
||
|
|
**章节来源**
|
||
|
|
- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java)
|
||
|
|
- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java)
|
||
|
|
- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java)
|
||
|
|
- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java)
|
||
|
|
- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java)
|
||
|
|
- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java)
|
||
|
|
- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java)
|
||
|
|
- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java)
|
||
|
|
|
||
|
|
## 结论
|
||
|
|
本核心配置模块通过 MyBatis Plus、Redis、Jackson、Knife4j、雪花算法与跨域配置的有机结合,提供了稳定、可扩展的后端基础能力。开发者可根据业务需求灵活扩展填充规则、ID 生成策略与序列化行为,确保系统在高性能与可维护性之间取得平衡。
|
||
|
|
|
||
|
|
[本节为总结性内容,不直接分析具体文件]
|
||
|
|
|
||
|
|
## 附录
|
||
|
|
- 常用配置项速查
|
||
|
|
- MyBatis Plus:分页插件、全局策略、填充处理器、ID 生成器。
|
||
|
|
- Redis:连接信息、序列化、连接池、超时。
|
||
|
|
- Jackson:日期格式、时区、空值策略、枚举序列化。
|
||
|
|
- Knife4j:开关、分组、访问路径、安全策略。
|
||
|
|
- 雪花算法:数据中心位、机器位、序列号位、起始时间。
|
||
|
|
- CORS:源、方法、头、凭证、预检缓存。
|
||
|
|
|
||
|
|
[本节为补充信息,不直接分析具体文件]
|