全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 6 分钟 ✍️ juanwangdev

Spring Boot 环境变量与系统属性

环境变量和系统属性是Spring Boot重要的外部配置来源,适合容器化部署场景。

系统属性

设置方式

Java
// 方式一:启动脚本
java -Dserver.port=8081 -jar app.jar

// 方式二:代码设置(启动前)
System.setProperty("server.port", "8081");

// 方式三:命令行参数转换
java -jar app.jar --server.port=8081  // 自动转为系统属性

优先级

系统属性优先级仅次于命令行参数:

优先级配置来源
1命令行参数
2Java系统属性
3环境变量
4配置文件

环境变量

设置方式

Bash
# Linux/Mac
export SERVER_PORT=8081
java -jar app.jar

# Windows
set SERVER_PORT=8081
java -jar app.jar

# Docker
docker run -e SERVER_PORT=8081 myapp

# Kubernetes
env:
  - name: SERVER_PORT
    value: "8081"

命名转换规则

环境变量命名转换为Spring属性:

环境变量Spring属性
SERVER_PORTserver.port
SPRING_PROFILES_ACTIVEspring.profiles.active
MY_SERVICE_HOST_NAMEmy.service.host-name
MY_SERVICE_HOSTNAMEmy.service.hostname

环境变量转属性规则:去掉下划线,小写,转点号和下划线。

属性绑定机制

Java
// EnvironmentPropertySource加载环境变量
// SystemEnvironmentPropertySource处理命名转换

public class SystemEnvironmentPropertySource extends PropertySource<Map<String, Object>> {

    // 支持多种命名格式查找
    // SERVER_PORT -> server.port
    // Server_Port -> server.port
    // server.port -> server.port
}

环境变量覆盖系统属性

Bash
# 同时设置
java -Dserver.port=8080 -jar app.jar
export SERVER_PORT=8081

# 结果:8080(系统属性优先级高于环境变量)

配置属性与环境变量

YAML
# application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
Bash
# 通过环境变量覆盖
export SPRING_DATASOURCE_URL=jdbc:mysql://prod-db:3306/mydb
export SPRING_DATASOURCE_USERNAME=prod_user

容器化配置示例

Docker

Bash
# Dockerfile
ENV SERVER_PORT=8080

# docker run
docker run -e SERVER_PORT=9090 \
           -e SPRING_PROFILES_ACTIVE=prod \
           myapp

Kubernetes

YAML
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: myapp
    image: myapp:latest
    env:
    - name: SERVER_PORT
      value: "8081"
    - name: SPRING_PROFILES_ACTIVE
      value: "prod"
    - name: SPRING_DATASOURCE_URL
      valueFrom:
        secretKeyRef:
          name: db-secret
          key: url

常用环境变量

环境变量说明
SPRING_PROFILES_ACTIVE激活Profile
SERVER_PORT服务端口
SPRING_DATASOURCE_URL数据源URL
SPRING_DATASOURCE_USERNAME数据库用户名
SPRING_DATASOURCE_PASSWORD数据库密码
JAVA_OPTSJVM参数

获取环境配置

Java
@Component
public class MyComponent {

    @Autowired
    private Environment environment;

    public void process() {
        String port = environment.getProperty("server.port");
        String url = environment.getProperty("spring.datasource.url");
    }

    // 通过@Value注入
    @Value("${server.port}")
    private String port;
}

环境变量限制

Bash
# 环境变量不支持复杂对象绑定
# 需使用配置文件或命令行参数

# 集合/数组
SPRING_APPLICATION_JSON='{"my":{"list":["a","b"]}}'

要点总结

  • 系统属性使用-D参数设置,优先级高于环境变量
  • 环境变量命名转换:下划线分隔,大写
  • 环境变量适合容器化部署配置
  • Environment.getProperty获取配置值
  • 系统属性和环境变量均支持松散绑定

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring Boot 命令行参数覆盖
下一篇 → Spring Boot 配置文件加载优先级
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库