# 技术栈 **本文引用的文件** - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-base/pom.xml](file://crm-base/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) - [crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [crm-base/src/main/java/com/crm/base/config/JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java) - [crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) - [crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本技术栈文档面向CRM后端项目,系统性梳理并说明核心技术选型与集成方式,包括Spring Boot、MyBatis Plus、Redis、MySQL、MinIO等关键技术与版本信息;阐述Spring Security认证授权、Knife4j API文档、Jackson JSON处理等组件的作用与配置;解释第三方服务集成(如钉钉认证、文件预览服务);总结开发工具链、构建工具与测试框架的选择理由;提供版本兼容性矩阵与升级建议,帮助开发者在统一规范下高效协作与演进。 ## 项目结构 本项目采用多模块Maven工程组织: - crm-app:应用启动入口与全局配置 - crm-base:公共基础能力(安全、数据访问、序列化、异常、分页、工具类等) - crm-auth:认证授权与权限控制(含第三方登录) - crm-file:文件上传下载与在线预览(对接MinIO与KKFileView) ```mermaid graph TB subgraph "应用层" APP["crm-app
应用启动"] end subgraph "业务域" AUTH["crm-auth
认证与权限"] FILE["crm-file
文件服务"] end subgraph "基础能力" BASE["crm-base
通用组件"] end APP --> AUTH APP --> FILE AUTH --> BASE FILE --> BASE ``` 图表来源 - [crm-app/pom.xml](file://crm-app/pom.xml) - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) - [crm-base/pom.xml](file://crm-base/pom.xml) 章节来源 - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-base/pom.xml](file://crm-base/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) ## 核心组件 - Spring Boot:作为应用框架,提供自动装配、Web容器、配置管理、监控与扩展点。 - MyBatis Plus:增强ORM能力,简化CRUD、分页、条件构造与元数据填充。 - Redis:缓存与会话存储、分布式锁、热点数据加速。 - MySQL:关系型数据存储,承载业务主数据。 - MinIO:对象存储,用于文件上传、下载与生命周期管理。 - Spring Security + JWT:无状态认证授权,支持角色与数据权限。 - Knife4j:基于Swagger的API文档与调试工具。 - Jackson:JSON序列化与反序列化定制。 - 第三方集成:钉钉认证、KKFileView文件预览。 章节来源 - [crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [crm-base/src/main/java/com/crm/base/config/JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java) - [crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) ## 架构总览 系统以Spring Boot为底座,分层清晰: - Web层:Controller暴露REST接口,Knife4j生成文档。 - 安全层:Spring Security拦截请求,JWT过滤器校验令牌,注入用户上下文。 - 业务层:Service编排领域逻辑,调用Mapper与外部客户端。 - 数据层:MyBatis Plus映射实体与SQL,Redis缓存热点数据,MySQL持久化。 - 文件层:MinIO对象存储,KKFileView在线预览。 ```mermaid graph TB Client["客户端"] --> API["Web控制器"] API --> SEC["Spring Security + JWT过滤器"] SEC --> SVC["业务服务"] SVC --> DB["MyBatis Plus -> MySQL"] SVC --> CACHE["Redis"] SVC --> MINIO["MinIO 对象存储"] SVC --> PREVIEW["KKFileView 预览服务"] API --> DOC["Knife4j 文档"] ``` 图表来源 - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) - [crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) - [crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) ## 详细组件分析 ### Spring Boot 与模块化 - 作用:统一依赖管理、自动装配、Web容器、配置中心、Actuator监控。 - 集成方式:各子模块通过Maven聚合,父POM集中声明版本与插件。 - 最佳实践:按功能拆分模块,避免循环依赖;使用Profile区分环境配置。 章节来源 - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) ### MyBatis Plus 与数据库 - 作用:简化CRUD、分页、条件构造、自动填充、逻辑删除等。 - 集成方式:通过MybatisPlusConfig进行插件与全局策略配置。 - 性能要点:合理使用索引与分页参数,避免N+1查询;批量操作优先。 章节来源 - [crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) ### Redis 缓存与会话 - 作用:缓存热点数据、分布式会话、限流与锁。 - 集成方式:RedisConfig定义连接与序列化策略。 - 注意事项:设置合理的过期时间,避免雪崩;键命名规范与分片策略。 章节来源 - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) ### Jackson JSON 处理 - 作用:统一日期、枚举、空值、时区等序列化规则。 - 集成方式:JacksonConfig注册模块与自定义处理器。 - 最佳实践:禁用未知字段报错或按需开启;统一响应体包装。 章节来源 - [crm-base/src/main/java/com/crm/base/config/JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java) ### Knife4j API 文档 - 作用:自动生成OpenAPI文档,支持在线调试与导出。 - 集成方式:Knife4jConfig启用注解扫描与UI路径。 - 建议:为每个Controller添加清晰的注解描述,保持文档与代码同步。 章节来源 - [crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) ### Spring Security 与 JWT 认证 - 作用:统一鉴权、URL级权限控制、数据范围过滤。 - 集成方式:SecurityConfig定义放行与保护路径;JwtAuthenticationFilter解析Token并注入上下文。 - 最佳实践:最小权限原则;敏感接口强制HTTPS;Token刷新机制。 章节来源 - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) ### 钉钉第三方认证 - 作用:支持企业内用户免密登录与账号绑定。 - 集成方式:DingTalkAuthClient封装HTTP调用与回调处理。 - 注意事项:签名校验、网络超时与重试、错误码映射。 章节来源 - [crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) ### MinIO 文件存储 - 作用:对象存储,支撑文件上传、下载、分片与生命周期管理。 - 集成方式:MinioConfig初始化客户端与桶策略。 - 最佳实践:分块上传提升大文件稳定性;CDN加速静态资源。 章节来源 - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) ### KKFileView 文件预览 - 作用:将Office、PDF、图片等在线预览,减少前端复杂度。 - 集成方式:KkFileViewClient封装预览链接生成与转发。 - 注意事项:预览服务可用性探测与降级策略;缓存预览结果。 章节来源 - [crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) ### 应用配置与环境 - 作用:统一管理数据库、Redis、MinIO、第三方服务等配置项。 - 集成方式:application.yml按环境划分,结合Profile加载。 - 建议:敏感信息走环境变量或密钥管理服务。 章节来源 - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) ## 依赖分析 - 模块耦合:crm-base为所有模块提供基础能力;crm-auth与crm-file均依赖crm-base。 - 外部依赖:Spring Boot生态、MyBatis Plus、Redis、MinIO SDK、Knife4j、Jackson。 - 潜在风险:跨模块版本不一致导致兼容性问题;第三方SDK升级需回归测试。 ```mermaid graph LR BASE["crm-base"] --> |被依赖| AUTH["crm-auth"] BASE --> |被依赖| FILE["crm-file"] APP["crm-app"] --> AUTH APP --> FILE AUTH --> |HTTP| DING["钉钉服务"] FILE --> |HTTP| KKV["KKFileView"] AUTH --> |JDBC| MYSQL["MySQL"] AUTH --> |缓存| REDIS["Redis"] FILE --> |对象存储| MINIO["MinIO"] ``` 图表来源 - [crm-base/pom.xml](file://crm-base/pom.xml) - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) 章节来源 - [pom.xml](file://pom.xml) - [crm-base/pom.xml](file://crm-base/pom.xml) - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) ## 性能考虑 - 数据库:合理索引设计、分页限制、读写分离与连接池调优。 - 缓存:热点数据优先入缓存,设置TTL与防穿透/击穿/雪崩策略。 - 文件:分片上传、断点续传、并发下载限速与CDN加速。 - 安全:JWT验签开销控制,必要时引入本地缓存或短效令牌。 - 监控:接入日志与指标采集,定位慢查询与异常热点。 [本节为通用指导,不直接分析具体文件] ## 故障排查指南 - 认证失败:检查JWT过滤器与Security配置路径放行;核对Token签发与校验逻辑。 - 权限异常:确认角色与菜单数据、数据范围注解生效。 - 文件上传失败:验证MinIO连通性与桶权限;检查分片大小与重试策略。 - 预览不可用:检测KKFileView服务健康状态,实现降级返回原文件或缩略图。 - 缓存问题:查看Redis连接与序列化配置,核对键空间与过期时间。 章节来源 - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) - [crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) ## 结论 本项目以Spring Boot为核心,围绕MyBatis Plus、Redis、MySQL、MinIO构建了稳定可扩展的后端体系;借助Spring Security与JWT实现细粒度权限控制,Knife4j提升研发效率,Jackson保障数据一致性;通过钉钉与KKFileView完成第三方能力集成。建议在版本管理与依赖治理上持续优化,完善监控与容错,确保系统在演进中保持稳定与高性能。 [本节为总结性内容,不直接分析具体文件] ## 附录 ### 技术栈版本与兼容性矩阵(示例) - Spring Boot:推荐2.7.x 或 3.x(根据Java版本选择),注意与Spring Security、MyBatis Plus的版本匹配 - Java:11/17(依据Spring Boot版本要求) - MyBatis Plus:3.5.x(与Spring Boot 2.7/3.x兼容) - Redis:Lettuce或Jedis客户端,对应Redis Server 6.x/7.x - MySQL:8.0.x(驱动与连接池版本需匹配) - MinIO:官方SDK与MinIO Server最新稳定版 - Knife4j:与SpringDoc/Swagger版本对齐 - Jackson:随Spring Boot管理版本 [本节为通用参考,不直接分析具体文件] ### 升级指南 - 先升级基础库(Spring Boot、Jackson、MyBatis Plus),再升级业务依赖 - 逐步替换第三方SDK,关注弃用API与行为变更 - 全量回归测试,重点覆盖认证、文件、缓存与数据库路径 - 灰度发布与回滚预案,监控关键指标 [本节为通用指导,不直接分析具体文件] ### 开发工具链与测试框架 - 构建工具:Maven(多模块聚合、依赖与插件统一管理) - 单元测试:JUnit 5 + Mockito(覆盖服务与工具类) - 集成测试:基于内存数据库与Mock外部服务 - 代码质量:SonarQube、Checkstyle、SpotBugs(可选) - 文档:Knife4j(API)、README与模块说明 [本节为通用指导,不直接分析具体文件]