Spring Boot 3.x applicatio.yaml关于spring.profiles推荐写法

1. defaultactive 的区别

1
2
3
spring:
profiles:
default: dev

它的含义是:

只有当没有指定 spring.profiles.active 时,才使用 dev

情况一:什么都不指定

1
./valuation-engine-runtime

最终:

1
Active Profiles = dev

情况二:指定 test

1
2
./valuation-engine-runtime \
--spring.profiles.active=test

或者

1
2
SPRING_PROFILES_ACTIVE=test \
./valuation-engine-runtime

最终:

1
Active Profiles = test

不会再有 dev。


情况三:指定多个

1
2
./valuation-engine-runtime \
--spring.profiles.active=test,pro

最终:

1
Active Profiles = test, pro

2. 为什么不要用 active: dev

1
2
3
spring:
profiles:
active: dev

然后启动:

1
-Dspring.profiles.active=test

你的日志变成了:

1
2
3
4
The following 2 profiles are active:

test
dev

这正是你遇到的问题。

对于需要在不同环境切换(尤其是 Native + ConfigData)的应用,**不建议在 application.yaml 中固定写 active**。


3. 推荐配置

你的 application.yaml 建议改成:

1
2
3
4
5
6
spring:
application:
name: valuation-engine

profiles:
default: dev
  • 本地开发直接运行,不指定 Profile,会自动使用 dev
  • 测试环境:
1
SPRING_PROFILES_ACTIVE=test ./valuation-engine-runtime
  • 生产环境:
1
SPRING_PROFILES_ACTIVE=pro ./valuation-engine-runtime

都不会把 dev 一起激活。


4. Native 环境推荐使用环境变量

对于 GraalVM Native,我建议优先使用环境变量,而不是 -D

1
2
3
4
5
6
7
8
9
10
11
12
export SPRING_PROFILES_ACTIVE=test
export SERVER_PORT=9090
./valuation-engine-runtime

or

SPRING_PROFILES_ACTIVE=test \
SERVER_PORT=9090 \
./valuation-engine-runtime

or
./valuation-engine-runtime -Dspring.profiles.active=test -Dserver.port=9090