Spring Boot 启动时固定加载 application.yaml,然后根据激活的 Profile 再加载对应的 application-{profile}.yaml:
Plain Text
1
2
3
4
5
| 启动 → 加载 application.yaml (必读)
↓
激活 profile = dev
↓
加载 application-dev.yaml (覆盖/补充同名配置)
|
application.yaml 是公共配置,application-dev.yaml 是环境特有配置,两者合并(后者覆盖前者同名 key)。
二、Profile 激活方式(3 种)
方式 1:application.yaml 里指定(默认 dev)
1
2
3
| spring:
profiles:
active: dev # 启动时自动加载 application-dev.yaml
|
本地 IDE 直接运行就激活 dev。
方式 2:启动参数覆盖
1
2
3
4
5
| # 命令行
java -jar app.jar --spring.profiles.active=prod
# Docker
docker run -e SPRING_PROFILES_ACTIVE=prod app
|
启动参数会覆盖 application.yaml 里的 active,所以 Docker 里跑 prod。
方式 3:环境变量
1
2
| export SPRING_PROFILES_ACTIVE=prod
java -jar app.jar
|
三、本地 vs Docker 怎么分开运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| ┌─────────────────────────────────────────────────────────────┐
│ 本地 IDE 运行 │
│ ──────────────── │
│ application.yaml: │
│ spring.profiles.active: dev ← 默认激活 dev │
│ ↓ │
│ 加载 application-dev.yaml │
│ MySQL: 127.0.0.1:3308 │
│ Redis: 127.0.0.1:6379 │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ Docker 运行 │
│ ──────────── │
│ docker-compose.yml: │
│ environment: │
│ SPRING_PROFILES_ACTIVE: prod ← 覆盖为 prod │
│ ↓ │
│ 加载 application-prod.yaml │
│ MySQL: mysql (容器服务名) │
│ Redis: redis (容器服务名) │
└─────────────────────────────────────────────────────────────┘
|
关键:同一份 jar 包,只是启动时传入的 profile 不同,加载的配置文件就不同。
四、具体配置示例
application.yaml(公共)
1
2
3
4
5
6
7
8
9
| server:
port: 8081
spring:
profiles:
active: dev # 默认 dev,本地 IDE 直接跑就走这里
mybatis-plus:
type-aliases-package: com.hmdp.entity
|
application-dev.yaml(本地开发)
1
2
3
4
5
6
7
8
9
10
11
| spring:
datasource:
url: jdbc:mysql://127.0.0.1:3308/hmdp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: root
password: 123456
redis-node:
node1:
host: 127.0.0.1
port: 6379
password: redis123
|
application-prod.yaml(Docker)
1
2
3
4
5
6
7
8
9
10
11
| spring:
datasource:
url: jdbc:mysql://mysql:3306/hmdp?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username: ${MYSQL_USER:root}
password: ${MYSQL_PASSWORD:123456}
redis-node:
node1:
host: redis
port: 6379
password: ${REDIS_PASSWORD:redis123}
|
docker-compose.yml(传参)
1
2
3
4
5
6
7
8
| services:
backend:
image: hmdp-backend
environment:
SPRING_PROFILES_ACTIVE: prod # 关键!覆盖为 prod
depends_on:
- mysql
- redis
|
评论
评论区加载中...