# 新大洲车联网 CRM 系统 - 服务端启动说明 ## 📋 项目简介 新大洲车联网 CRM 系统服务端,基于 Spring Boot 3.5.9 构建的微服务架构。 ## 🔧 环境要求 - **JDK**: 17 或更高版本 - **Maven**: 3.6+ - **MySQL**: 5.7+ 或 8.0+ - **Redis**: 5.0+ 或 6.0+ - **IDE**: IntelliJ IDEA(推荐)或 Eclipse ## 📦 项目结构 ``` xdz_server/ ├── xdz-dependencies/ # 依赖管理模块 ├── xdz-framework/ # 框架基础模块 ├── xdz-module-user/ # 用户服务模块 │ ├── xdz-module-user-api/ # 用户服务 API(供其他服务调用) │ └── xdz-module-user-server/ # 用户服务(端口:18080) ├── xdz-module-vehicle/ # 车辆服务模块 │ ├── xdz-module-vehicle-api/ # 车辆服务 API(供其他服务调用) │ └── xdz-module-vehicle-server/ # 车辆服务(端口:18083) ├── xdz-module-message/ # 消息服务模块 │ ├── xdz-module-message-api/ # 消息服务 API(供其他服务调用) │ └── xdz-module-message-server/ # 消息服务(端口:18082) ├── xdz-module-business/ # 业务服务模块 │ ├── xdz-module-business-api/ # 业务服务 API(供其他服务调用) │ └── xdz-module-business-server/ # 业务服务(端口:18081) │ └── 包含社区模块(社区功能已集成到业务服务中) └── xdz-module-platform/ # 平台服务模块(预留) ``` ## 🔗 服务依赖关系 ### 模块编译依赖关系(Maven 依赖) ``` xdz-dependencies (依赖管理) ↓ xdz-framework (框架基础,依赖 xdz-dependencies) ↓ ├── API 模块(可并行编译,无相互依赖) │ ├── xdz-module-user-api │ ├── xdz-module-vehicle-api │ ├── xdz-module-message-api │ └── xdz-module-business-api │ └── Server 模块(依赖对应的 API 模块) ├── xdz-module-user-server │ └── 依赖:user-api, business-api │ ├── xdz-module-vehicle-server │ └── 依赖:vehicle-api, user-api, message-api │ ├── xdz-module-message-server │ └── 依赖:message-api, vehicle-api │ └── xdz-module-business-server └── 依赖:business-api, vehicle-api, message-api, user-api ``` **编译顺序说明**: 1. `xdz-dependencies` → `xdz-framework` 2. 所有 API 模块可并行编译(无相互依赖) 3. Server 模块需要等待对应的 API 模块编译完成 - `user-server` 需要 `user-api` 和 `business-api` - `vehicle-server` 需要 `vehicle-api`、`user-api`、`message-api` - `message-server` 需要 `message-api` 和 `vehicle-api` - `business-server` 需要所有 API 模块 ### 服务间调用依赖关系(运行时 Feign 调用) - **用户服务** (18080) - 调用:业务服务 API(短信验证码、社交登录等) - **业务服务** (18081) - 调用:用户服务 API、车辆服务 API、消息服务 API - 包含:社区模块(帖子、评论、话题、敏感词管理等) - **车辆服务** (18083) - 调用:用户服务 API、消息服务 API - **消息服务** (18082) - 调用:车辆服务 API(接收车辆告警消息等) ## 🚀 启动步骤 ### 1. 环境准备 #### 1.1 启动 MySQL 确保 MySQL 服务已启动,并创建相应的数据库。 #### 1.2 启动 Redis ```bash # 启动 Redis(默认端口 6379) redis-server ``` ### 2. 数据库配置 根据各服务的 `application-local.yaml` 配置文件,修改数据库连接信息: - **用户服务数据库**:`xdz_user` - **车辆服务数据库**:`xdz_vehicle` - **消息服务数据库**:`xdz_message` - **业务服务数据库**:`xdz_business`(包含社区模块的表) - 社区模块的表位于 `xdz_business` 数据库中 - 表名以 `community_` 开头(如 `community_post`、`community_comment` 等) ### 3. 编译项目 **重要**:首次启动前,必须先编译整个项目。Maven 会按照模块依赖顺序自动编译。 #### 编译顺序说明 由于模块之间存在依赖关系,必须按照以下顺序编译: 1. **xdz-dependencies**(依赖管理模块)- 提供版本管理 2. **xdz-framework**(框架基础模块)- 依赖 xdz-dependencies 3. **所有 API 模块**(可并行编译,无相互依赖) - xdz-module-user-api - xdz-module-vehicle-api - xdz-module-message-api - xdz-module-business-api 4. **Server 模块**(依赖对应的 API 模块) - xdz-module-user-server(依赖 user-api, business-api) - xdz-module-vehicle-server(依赖 vehicle-api, user-api, message-api) - xdz-module-message-server(依赖 message-api, vehicle-api) - xdz-module-business-server(依赖所有 API 模块) #### 方式一:编译整个项目(推荐) ```bash # 进入项目根目录 cd xdz_server # 编译整个项目(Maven 会自动处理依赖顺序) # 注意:使用 -DskipTests 跳过测试(测试代码已忽略,不提交到 Git) mvn clean install -DskipTests ``` **说明**: - Maven 会根据模块依赖关系自动确定编译顺序,无需手动指定 - 使用 `-DskipTests` 跳过测试阶段(测试代码不提交到 Git,本地也没有测试代码) - 如果本地有测试代码想运行,可以不加 `-DskipTests` 参数 #### 方式二:分步编译(如果方式一失败或需要增量编译) ```bash # 注意:所有命令都添加了 -DskipTests 参数跳过测试 # 1. 先编译依赖管理模块 mvn clean install -pl xdz-dependencies -am -DskipTests # 2. 编译框架模块(依赖 xdz-dependencies) mvn clean install -pl xdz-framework -am -DskipTests # 3. 编译所有 API 模块(可并行,无相互依赖) mvn clean install -pl xdz-module-user/xdz-module-user-api -am -DskipTests mvn clean install -pl xdz-module-vehicle/xdz-module-vehicle-api -am -DskipTests mvn clean install -pl xdz-module-message/xdz-module-message-api -am -DskipTests mvn clean install -pl xdz-module-business/xdz-module-business-api -am -DskipTests # 4. 编译用户服务(依赖 user-api, business-api) mvn clean install -pl xdz-module-user -am -DskipTests # 5. 编译车辆服务(依赖 vehicle-api, user-api, message-api) mvn clean install -pl xdz-module-vehicle -am -DskipTests # 6. 编译消息服务(依赖 message-api, vehicle-api) mvn clean install -pl xdz-module-message -am -DskipTests # 7. 编译业务服务(依赖所有 API 模块) mvn clean install -pl xdz-module-business -am -DskipTests ``` **注意**: - 如果编译失败,检查错误信息,通常是因为依赖模块未安装 - 如果某个服务模块修改了 API,需要重新编译该 API 模块,然后重新编译依赖它的 Server 模块 - 例如:修改了 `user-api`,需要重新编译 `xdz-module-user-api`,然后重新编译 `xdz-module-user-server` 和 `xdz-module-business-server` ### 4. 启动服务 #### 方式一:使用 Maven 启动(推荐) **前提**:确保已完成步骤 3 的编译。 **启动用户服务**: ```bash # 在项目根目录执行 cd xdz-module-user/xdz-module-user-server mvn spring-boot:run -Dspring-boot.run.profiles=local -DskipTests ``` **启动业务服务**: ```bash cd xdz-module-business/xdz-module-business-server mvn spring-boot:run -Dspring-boot.run.profiles=local -DskipTests ``` **启动车辆服务**: ```bash cd xdz-module-vehicle/xdz-module-vehicle-server mvn spring-boot:run -Dspring-boot.run.profiles=local -DskipTests ``` **启动消息服务**: ```bash cd xdz-module-message/xdz-module-message-server mvn spring-boot:run -Dspring-boot.run.profiles=local -DskipTests ``` **说明**: - 使用 `mvn spring-boot:run` 时,Maven 会自动编译依赖的模块 - 为了确保所有模块都已正确编译,建议先执行 `mvn clean install -DskipTests` - 添加 `-DskipTests` 参数跳过测试(测试代码不提交到 Git) #### 方式二:使用 IDE 启动 1. 在 IntelliJ IDEA 中打开项目 2. 找到各服务的启动类: - `UserServerApplication` - 用户服务 - `BusinessServerApplication` - 业务服务 - `VehicleServerApplication` - 车辆服务 - `MessageServiceApplication` - 消息服务 3. 右键选择 `Run`,并设置 Active profiles 为 `local` ### 5. 启动顺序 **重要**:由于服务间存在依赖关系,必须按照以下顺序启动: #### 推荐启动顺序 1. **用户服务**(18080) - 提供用户认证和 Token 生成 - 提供用户服务 API(供业务服务调用) - **必须先启动**,因为业务服务依赖用户服务 API 2. **业务服务**(18081) - 提供系统管理功能(权限、角色、菜单等) - **包含社区模块**(帖子、评论、话题、敏感词管理等) - 依赖:用户服务 API、车辆服务 API、消息服务 API - **必须在用户服务启动后启动** 3. **车辆服务**(18083) - 提供车辆管理功能 - 独立服务,可与其他服务并行启动 4. **消息服务**(18082) - 提供 SocketIO 实时通信 - 独立服务,可与其他服务并行启动 #### 启动顺序说明 - **用户服务** 和 **业务服务** 存在相互依赖: - 用户服务调用业务服务 API(短信验证码、社交登录等) - 业务服务调用用户服务 API(用户信息查询等) - 建议先启动用户服务,再启动业务服务(或先启动业务服务,再启动用户服务,但需要处理启动时的调用失败) - **车辆服务** 依赖用户服务 API 和消息服务 API: - 建议在用户服务启动后启动 - 可以与消息服务并行启动 - **消息服务** 依赖车辆服务 API: - 建议在车辆服务启动后启动,或与车辆服务并行启动(如果消息服务启动时车辆服务未就绪,相关功能会暂时不可用) - **业务服务** 包含社区模块,社区功能通过业务服务访问(端口 18081) ## 🌐 服务端口说明 | 服务 | 端口 | 说明 | |------|------|------| | 用户服务 | 18080 | 用户认证、会员管理、C端用户管理 | | 业务服务 | 18081 | 系统管理、权限管理、**社区模块**(帖子、评论、话题、敏感词等) | | 消息服务 | 18082 | SocketIO 实时通信 | | 车辆服务 | 18083 | 车辆管理、车辆控制 | | SocketIO | 9090 | WebSocket 实时通信端口 | **注意**:社区模块已集成到业务服务中,通过业务服务的端口(18081)访问,路径为 `/admin-api/community/*`。 ## ✅ 验证启动 ### 检查服务是否启动成功 1. **用户服务**:访问 `http://localhost:18080` 2. **业务服务**:访问 `http://localhost:18081` 3. **车辆服务**:访问 `http://localhost:18083` 4. **消息服务**:访问 `http://localhost:18082` ### 查看日志 各服务的日志会输出到控制台,启动成功后会看到类似信息: ``` Started UserServerApplication in X.XXX seconds Started BusinessServerApplication in X.XXX seconds Started VehicleServerApplication in X.XXX seconds Started MessageServiceApplication in X.XXX seconds ``` ## 🔐 服务间调用说明 ### 服务间 JWT Token 各服务之间通过 Feign 调用时,会自动生成服务间 JWT Token 进行认证。 **需要私钥的服务**(需要调用其他服务): - ✅ 用户服务 - 调用业务服务(短信验证码、社交登录等) - ✅ 业务服务 - 调用车辆服务、消息服务 - ✅ 消息服务 - 调用车辆服务 - ✅ 车辆服务 - 可能调用用户服务、消息服务 **只需公钥的服务**(只被调用): - 所有服务都需要公钥来验证服务间 JWT Token ### 密钥文件位置 各服务的密钥文件位于: ``` xdz-module-{service}-server/src/main/resources/jwt/ ├── service_jwt_private_key.pem # 私钥(用于生成 Token) └── service_jwt_public_key.pem # 公钥(用于验证 Token) ``` ## 🐛 常见问题 ### 1. 编译失败:找不到 xdz-dependencies **解决方案**: ```bash mvn clean install -pl xdz-dependencies -am ``` ### 2. 端口被占用 **解决方案**:修改 `application.yaml` 中的 `server.port` 配置 ### 3. 数据库连接失败 **解决方案**:检查 `application-local.yaml` 中的数据库配置: - 数据库地址 - 数据库名称 - 用户名和密码 ### 4. Redis 连接失败 **解决方案**: - 确保 Redis 服务已启动 - 检查 `application-local.yaml` 中的 Redis 配置 - 默认端口:6379 ### 5. 服务间调用失败 **解决方案**: - 检查服务是否都已启动(特别是被依赖的服务) - 检查服务间 JWT 密钥文件是否存在 - 查看日志中的错误信息 - 确认服务启动顺序是否正确(用户服务应先于业务服务启动) ### 6. 社区模块接口返回 404 **解决方案**: - 确认业务服务已启动(社区模块集成在业务服务中) - 检查接口路径是否正确:`/admin-api/community/*` - 确认数据库表已创建(社区模块的表在 `xdz_business` 数据库中) - 检查是否有 Bean 名称冲突(已通过重命名解决:`CommunityPostMapper`、`CommunityTopicMapper` 等) ## 📝 配置文件说明 各服务的配置文件位于: ``` xdz-module-{service}-server/src/main/resources/ ├── application.yaml # 主配置文件 ├── application-local.yaml # 本地开发环境配置 ├── application-dev.yaml # 开发环境配置 └── application-prod.yaml # 生产环境配置 ``` 启动时使用 `local` profile,会加载 `application.yaml` 和 `application-local.yaml`。 ## 🔗 相关链接 - Spring Boot 官方文档:https://spring.io/projects/spring-boot - 项目 Git 仓库:[Git 地址] ## 📞 技术支持 如有问题,请联系开发团队。