# 应用入口模块(crm-app) **本文引用的文件** - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) - [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) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能与可观测性](#性能与可观测性) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本章节面向“应用入口模块 crm-app”,聚焦 Spring Boot 应用的启动配置、多模块统一启动方式、配置文件结构与环境变量管理,以及服务注册发现、部署配置、监控集成与日志配置等运维要点。该模块作为聚合启动器,负责装配各业务子模块(如认证、基础能力、文件服务等),并提供统一的运行入口与环境适配。 ## 项目结构 crm-app 为 Spring Boot 的启动模块,包含: - 启动类:定义应用主类与扫描范围 - 配置文件:application.yml 提供默认配置项 - Maven 构建:通过父 POM 与子模块 POM 进行依赖管理与打包 ```mermaid graph TB A["crm-app(启动模块)"] --> B["crm-base(基础能力)"] A --> C["crm-auth(认证授权)"] A --> D["crm-file(文件服务)"] A --> E["其他业务模块(按需引入)"] subgraph "Maven 工程" F["根 pom.xml(聚合/依赖管理)"] G["crm-app/pom.xml(启动器依赖)"] end F --> G G --> B G --> C G --> D ``` 图表来源 - [crm-app/pom.xml](file://crm-app/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) 章节来源 - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) ## 核心组件 - 启动类:Spring Boot 应用主类,用于引导容器、启用自动配置与组件扫描 - 配置文件:application.yml 集中管理端口、数据源、缓存、安全、第三方客户端等 - 模块依赖:通过 Maven 聚合与依赖声明,将 crm-base、crm-auth、crm-file 等能力注入到启动器 章节来源 - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) - [crm-app/pom.xml](file://crm-app/pom.xml) ## 架构总览 下图展示以 crm-app 为入口的多模块 Spring Boot 应用整体架构,包括启动流程、配置加载、模块装配与外部依赖接入。 ```mermaid graph TB subgraph "进程内" APP["CrmAppApplication
Spring Boot 启动器"] CFG["application.yml
配置中心"] BASE["crm-base
通用能力(异常/工具/安全上下文)"] AUTH["crm-auth
认证授权/权限/用户角色菜单"] FILE["crm-file
文件上传/预览/清理任务"] end subgraph "外部依赖" DB["数据库(MySQL/PostgreSQL)"] CACHE["缓存(Redis)"] OSS["对象存储(Minio/S3)"] EXT["第三方服务(钉钉/企业微信等)"] end APP --> CFG APP --> BASE APP --> AUTH APP --> FILE AUTH --> DB AUTH --> CACHE FILE --> OSS AUTH --> EXT ``` 图表来源 - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) - [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) ## 详细组件分析 ### 启动类与装配 - 启动类职责 - 定义应用主类并触发 Spring Boot 自动装配 - 指定组件扫描包路径,确保 crm-base、crm-auth、crm-file 等模块的 Bean 被正确发现 - 可通过注解或属性开关控制功能特性(如定时任务、Web 服务器、安全过滤器) - 常见扩展点 - 自定义 EnvironmentPostProcessor 用于动态配置注入 - CommandLineRunner/SmartLifecycle 用于启动后初始化逻辑 - @ConditionalOnProperty/@EnableXxx 实现按环境启停能力 章节来源 - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) ### 配置文件与环境变量 - application.yml 作用 - 统一声明 Web 端口、上下文路径、时区、字符集等 - 数据源连接信息、Redis 连接、MinIO/OSS 端点与凭据 - 安全相关(JWT、密码策略)、第三方客户端(钉钉等)配置 - 环境变量覆盖 - 支持通过系统环境变量或启动参数覆盖 yml 中的键值 - 推荐在生产使用环境变量管理敏感信息(密钥、连接串) - 多环境配置建议 - 使用 spring.profiles.active 切换 dev/test/prod - 将敏感配置放入环境变量或外部配置中心 章节来源 - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) ### 多模块统一启动方式 - Maven 聚合 - 根 pom.xml 聚合所有子模块,便于统一版本与依赖管理 - crm-app/pom.xml 声明对 crm-base、crm-auth、crm-file 的依赖 - 启动命令 - 在 crm-app 目录下执行 mvn spring-boot:run 或打包后 java -jar 运行 - 通过 -Dspring.profiles.active=dev|test|prod 切换环境 - 依赖冲突解决 - 在根 pom.xml 中统一管理第三方库版本 - 使用 dependencyManagement 收敛版本,避免传递依赖冲突 章节来源 - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/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) ### 服务注册与发现(可选) - 若引入注册中心(Nacos/Eureka/Consul),需在 crm-app 依赖中添加对应 starter - 在 application.yml 中配置注册中心地址、命名空间、鉴权信息 - 通过 @EnableDiscoveryClient 或自动配置启用服务注册与发现 - 网关或服务间调用需配合负载均衡与熔断降级 章节来源 - [crm-app/pom.xml](file://crm-app/pom.xml) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) ### 部署配置与打包 - 构建产物 - 使用 maven-jar-plugin 或 spring-boot-maven-plugin 生成可执行 jar - 分离依赖与配置,便于容器化与滚动升级 - 容器化 - 基于 OpenJDK 镜像,设置 JVM 参数(内存、GC、时区) - 通过环境变量注入敏感配置,挂载只读配置文件 - 健康检查与就绪探针 - 暴露 /actuator/health 与 /actuator/info - 在编排平台配置 liveness/readiness 探针 章节来源 - [crm-app/pom.xml](file://crm-app/pom.xml) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) ### 监控集成与日志配置 - Actuator 指标 - 暴露 JVM、线程池、HTTP 请求、数据库连接池等指标 - 结合 Prometheus/Grafana 采集与可视化 - 链路追踪 - 集成 Sleuth/Zipkin 或 SkyWalking,输出 TraceId - 日志 - 使用 Logback/Log4j2,按模块与级别输出 - 生产建议输出 JSON 格式,便于日志收集与分析 章节来源 - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) ## 依赖关系分析 下图展示 crm-app 与其子模块之间的依赖关系,以及关键外部依赖的接入点。 ```mermaid graph LR ROOT["根 pom.xml"] --> APP["crm-app/pom.xml"] APP --> BASE["crm-base/pom.xml"] APP --> AUTH["crm-auth/pom.xml"] APP --> FILE["crm-file/pom.xml"] AUTH --> DB["数据库驱动"] AUTH --> REDIS["Redis 客户端"] FILE --> MINIO["MinIO/S3 客户端"] ``` 图表来源 - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/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) 章节来源 - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) ## 性能与可观测性 - JVM 调优 - 根据容器资源限制合理设置堆大小与 GC 策略 - 开启 JIT 预热与编译优化 - 连接池 - 数据库连接池与 Redis 连接池参数按 QPS 与延迟目标调整 - 监控告警 - 基于 Actuator + Prometheus + Alertmanager 建立阈值告警 - 关键错误码与慢查询纳入日志与指标体系 [本节为通用指导,不直接分析具体文件] ## 故障排查指南 - 启动失败 - 检查端口占用、数据源与缓存连通性 - 查看启动日志定位 Bean 创建失败或循环依赖 - 配置问题 - 确认 profiles 激活与优先级(命令行 > 环境变量 > application.yml) - 校验敏感配置是否被正确注入 - 运行时异常 - 通过 Actuator 与健康检查快速定位 - 结合链路追踪与结构化日志定位问题根因 章节来源 - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) ## 结论 crm-app 作为 Spring Boot 应用的统一入口,承担启动装配、配置管理与模块聚合职责。通过清晰的依赖边界与环境隔离,能够支撑从开发到生产的平滑演进。建议在后续迭代中完善服务注册发现、监控与日志规范,提升系统的可观测性与可维护性。 [本节为总结性内容,不直接分析具体文件] ## 附录 - 常用启动命令 - 本地开发:mvn spring-boot:run -pl crm-app -am - 打包运行:mvn clean package -DskipTests && java -jar target/crm-app.jar - 指定环境:java -jar target/crm-app.jar --spring.profiles.active=prod - 环境变量示例 - SERVER_PORT、SPRING_PROFILES_ACTIVE - SPRING_DATASOURCE_*、SPRING_REDIS_* - MINIO_ENDPOINT、MINIO_ACCESS_KEY、MINIO_SECRET_KEY [本节为补充说明,不直接分析具体文件]