QDAirPortBackend0122/doc/guide/配置重构后的编译说明.md
2026-01-22 13:19:47 +08:00

6.0 KiB
Raw Permalink Blame History

配置重构后的编译说明

日期: 2025-01-10 适用版本: v1.0.1+


配置重构后,编译命令需要改吗?

答案: 不需要改!


📋 编译命令保持不变

开发环境编译

# 完整编译
mvn clean install

# 跳过测试(更快)
mvn clean install -DskipTests

# 只编译 admin 模块
cd qaup-admin
mvn clean package -DskipTests

生产环境打包

# 打包生产版本
mvn clean package -DskipTests

# 或指定 profile可选
mvn clean package -DskipTests -Pprod

🔍 为什么不需要修改?

1. 配置文件自动打包

Maven 会自动将 src/main/resources/ 下的所有文件打包到 jar 中,包括:

qaup-admin/src/main/resources/
├── application.yml              ✅ 自动打包
├── application-dev.yml          ✅ 自动打包
├── application-prod.yml         ✅ 自动打包
└── application-druid.yml        ✅ 自动打包

2. 环境变量是运行时机制

  • .env 文件不打包到 jar 中(也不应该打包)
  • 环境变量在应用启动时qaup.sh 加载
  • 与编译过程无关

3. Profile 在运行时指定

  • Profile 通过 --spring.profiles.active 在启动时指定
  • 不影响编译过程

📦 打包后的结构

jar 包内部结构

qaup-admin.jar
├── BOOT-INF/
│   ├── classes/
│   │   ├── application.yml              ✅ 打包
│   │   ├── application-dev.yml          ✅ 打包
│   │   ├── application-prod.yml         ✅ 打包
│   │   ├── application-druid.yml        ✅ 打包
│   │   └── com/qaup/...                 (Java类)
│   └── lib/                             (依赖jar)
├── META-INF/
└── org/springframework/boot/loader/

部署目录结构

/app/                          # 部署目录
├── qaup-admin.jar            # 打包的jar包含所有配置文件
├── qaup.sh                   # 启动脚本
├── .env                      ❌ 不打包,部署时手动创建
├── .env.example              📝 可选建议通过Git获取
└── logs/                     # 日志目录

🎯 完整的开发-部署流程

1 开发阶段(本地)

# 方式1: IDEA 中直接启动
# 自动使用 dev profile无需编译

# 方式2: Maven 启动
cd qaup-admin
mvn spring-boot:run -Dspring-boot.run.profiles=dev,druid

2 打包阶段

# 在项目根目录执行
mvn clean package -DskipTests

# 生成的 jar 包位置
ls -lh qaup-admin/target/qaup-admin.jar

3 部署阶段

# 1. 复制文件到服务器
scp qaup-admin/target/qaup-admin.jar user@server:/app/
scp qaup.sh user@server:/app/
scp .env.example user@server:/app/

# 2. 在服务器上创建配置
cd /app
cp .env.example .env
vim .env

# 3. 启动应用
./qaup.sh start

🔒 重要提醒

应该做的

  1. 打包所有配置文件到 jar

    # application*.yml 会自动打包
    mvn clean package -DskipTests
    
  2. 在部署时创建 .env

    # 在服务器上创建
    cp .env.example .env
    vim .env
    
  3. 通过 Git 管理配置模板

    # .gitignore
    .env              # 忽略实际配置
    !.env.example     # 保留模板
    

不应该做的

  1. 不要把 .env 打包到 jar

    • 包含敏感信息
    • 每个环境配置不同
  2. 不要在编译时指定环境变量

    # ❌ 错误
    mvn clean package -DAIRPORT_API_BASE_URL=http://...
    
    # ✅ 正确:编译时不指定,运行时通过 .env 加载
    mvn clean package -DskipTests
    
  3. 不要打包备份文件

    # 打包前删除
    rm qaup-admin/src/main/resources/*.backup
    

📋 建议的 .gitignore 配置

# 环境变量配置(重要!)
.env
.env.local
.env.production
.env.*.local

# 配置备份文件
*.backup

# 日志文件
logs/
*.log

# Maven 构建目录
target/

# IDEA 项目文件
.idea/
*.iml

🆚 配置重构前后对比

项目 重构前 重构后
编译命令 mvn clean package mvn clean package 不变
配置修改 修改配置文件 → 重新打包 修改 .env → 重启应用
环境切换 修改配置文件 → 重新打包 切换 .env → 重启应用
敏感信息 打包到 jar 中 保存在 .env 中

💡 常见问题

Q1: .env.example 要打包到 jar 吗?

A: 📝 建议不打包

原因:

  • 可以通过 Git 获取
  • 减小 jar 体积
  • 部署时从项目源码复制

操作:

# 部署时从项目获取
git clone <repo>
cp <project>/.env.example /app/.env

Q2: 如果我只修改了 .env需要重新编译吗

A: 不需要

# 只需要
vim .env
./qaup.sh restart

Q3: 如果我修改了 application-prod.yml需要重新编译吗

A: 需要

# 修改配置文件后
mvn clean package -DskipTests

# 重新部署 jar
scp qaup-admin/target/qaup-admin.jar user@server:/app/
./qaup.sh restart

建议: 尽量使用环境变量方式,避免重新打包


🎯 最佳实践总结

  1. 编译命令保持不变: mvn clean package -DskipTests
  2. 配置文件自动打包: 所有 application*.yml 都会打包
  3. 环境变量运行时加载: .env 不打包,部署时创建
  4. 敏感信息不打包: 密码、地址等通过 .env 管理
  5. 一次打包,多环境部署: 通过不同的 .env 文件区分环境

📚 相关文档


文档结束

最后更新: 2025-01-10 维护者: QAUP Team