启动说明.md 14 KB

新大洲车联网 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-dependenciesxdz-framework
  2. 所有 API 模块可并行编译(无相互依赖)
  3. Server 模块需要等待对应的 API 模块编译完成
    • user-server 需要 user-apibusiness-api
    • vehicle-server 需要 vehicle-apiuser-apimessage-api
    • message-server 需要 message-apivehicle-api
    • business-server 需要所有 API 模块

服务间调用依赖关系(运行时 Feign 调用)

  • 用户服务 (18080)

    • 调用:业务服务 API(短信验证码、社交登录等)
  • 业务服务 (18081)

    • 调用:用户服务 API、车辆服务 API、消息服务 API
    • 包含:社区模块(帖子、评论、话题、敏感词管理等)
  • 车辆服务 (18083)

    • 调用:用户服务 API、消息服务 API
  • 消息服务 (18082)

    • 调用:车辆服务 API(接收车辆告警消息等)

🚀 启动步骤

1. 环境准备

1.1 启动 MySQL

确保 MySQL 服务已启动,并创建相应的数据库。

1.2 启动 Redis

# 启动 Redis(默认端口 6379)
redis-server

2. 数据库配置

根据各服务的 application-local.yaml 配置文件,修改数据库连接信息:

  • 用户服务数据库xdz_user
  • 车辆服务数据库xdz_vehicle
  • 消息服务数据库xdz_message
  • 业务服务数据库xdz_business(包含社区模块的表)
    • 社区模块的表位于 xdz_business 数据库中
    • 表名以 community_ 开头(如 community_postcommunity_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 模块)

方式一:编译整个项目(推荐)

# 进入项目根目录
cd xdz_server

# 编译整个项目(Maven 会自动处理依赖顺序)
# 注意:使用 -DskipTests 跳过测试(测试代码已忽略,不提交到 Git)
mvn clean install -DskipTests

说明

  • Maven 会根据模块依赖关系自动确定编译顺序,无需手动指定
  • 使用 -DskipTests 跳过测试阶段(测试代码不提交到 Git,本地也没有测试代码)
  • 如果本地有测试代码想运行,可以不加 -DskipTests 参数

方式二:分步编译(如果方式一失败或需要增量编译)

# 注意:所有命令都添加了 -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-serverxdz-module-business-server

4. 启动服务

方式一:使用 Maven 启动(推荐)

前提:确保已完成步骤 3 的编译。

启动用户服务

# 在项目根目录执行
cd xdz-module-user/xdz-module-user-server
mvn spring-boot:run -Dspring-boot.run.profiles=local -DskipTests

启动业务服务

cd xdz-module-business/xdz-module-business-server
mvn spring-boot:run -Dspring-boot.run.profiles=local -DskipTests

启动车辆服务

cd xdz-module-vehicle/xdz-module-vehicle-server
mvn spring-boot:run -Dspring-boot.run.profiles=local -DskipTests

启动消息服务

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

解决方案

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 名称冲突(已通过重命名解决:CommunityPostMapperCommunityTopicMapper 等)

📝 配置文件说明

各服务的配置文件位于:

xdz-module-{service}-server/src/main/resources/
├── application.yaml           # 主配置文件
├── application-local.yaml     # 本地开发环境配置
├── application-dev.yaml       # 开发环境配置
└── application-prod.yaml      # 生产环境配置

启动时使用 local profile,会加载 application.yamlapplication-local.yaml

🔗 相关链接

📞 技术支持

如有问题,请联系开发团队。