前言
在 Spring Boot 中,环境变量占位符主要通过 ${...} 语法来引用外部配置,在部署的时候,可以从外部传入,不用写死在程序
环境变量命名转换规则
基本用法
application.properties / application.yml
ini
# 引用系统环境变量
server.port=${PORT:8080}
spring.datasource.url=${DB_URL:jdbc:mysql://localhost:3306/mydb}
spring.datasource.username=${DB_USERNAME:root}
spring.datasource.password=${DB_PASSWORD:123456}
ruby
server:
port: ${PORT:8080}
spring:
datasource:
url: ${DB_URL:jdbc:mysql://localhost:3306/mydb}
username: ${DB_USERNAME:root}
password: ${DB_PASSWORD:123456}
冒号 : 后面是默认值,当环境变量不存在时使用。
环境变量命名转换规则
Spring Boot 会自动将环境变量名转换为属性名,规则如下:
| 预期属性名 | 推荐环境变量名 |
|---|---|
server.port |
SERVER_PORT |
myapp.service.url |
MYAPP_SERVICE_URL |
myapp.max-pool-size |
MYAPP_MAX_POOL_SIZE |
- 下划线
_→ 转换为点.或破折号- - 大写字母 → 转换为小写
所以在容器化部署(Docker/K8s)中,通常使用全大写 + 下划线的形式来设置环境变量。
配置优先级(从高到低)
- 命令行参数 :
--server.port=9090 - JVM 系统属性 :
-Dserver.port=9090 - 操作系统环境变量 :
export SERVER_PORT=9090 - 外部配置文件 :
config/application.yml - 内部配置文件 :
classpath:/application.yml - 默认值 :占位符中
:后面的值
总结
生产环境中密码、密钥等敏感信息不建议直接写在配置文件中,可使用 Jasypt 加密或通过环境变量/密钥管理服务注入。