# 核心配置
**本文引用的文件**
- [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)
## 目录
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["应用启动
application.yml"] --> B["MyBatis Plus 配置
MybatisPlusConfig"]
A --> C["Redis 配置
RedisConfig"]
A --> D["Jackson 配置
JacksonConfig"]
A --> E["Knife4j 配置
Knife4jConfig"]
A --> F["跨域配置
CorsConfig"]
B --> G["雪花ID生成器
SnowflakeIdWorker"]
B --> H["自定义ID生成器
CustomIdGenerator"]
B --> I["元对象填充处理器
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:源、方法、头、凭证、预检缓存。
[本节为补充信息,不直接分析具体文件]