6.0 KiB
6.0 KiB
配置重构后的编译说明
日期: 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
🔒 重要提醒
✅ 应该做的
-
打包所有配置文件到 jar
# application*.yml 会自动打包 mvn clean package -DskipTests -
在部署时创建 .env
# 在服务器上创建 cp .env.example .env vim .env -
通过 Git 管理配置模板
# .gitignore .env # 忽略实际配置 !.env.example # 保留模板
❌ 不应该做的
-
不要把 .env 打包到 jar
- 包含敏感信息
- 每个环境配置不同
-
不要在编译时指定环境变量
# ❌ 错误 mvn clean package -DAIRPORT_API_BASE_URL=http://... # ✅ 正确:编译时不指定,运行时通过 .env 加载 mvn clean package -DskipTests -
不要打包备份文件
# 打包前删除 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
建议: 尽量使用环境变量方式,避免重新打包
🎯 最佳实践总结
- ✅ 编译命令保持不变:
mvn clean package -DskipTests - ✅ 配置文件自动打包: 所有
application*.yml都会打包 - ✅ 环境变量运行时加载:
.env不打包,部署时创建 - ✅ 敏感信息不打包: 密码、地址等通过
.env管理 - ✅ 一次打包,多环境部署: 通过不同的
.env文件区分环境
📚 相关文档
文档结束
最后更新: 2025-01-10 维护者: QAUP Team