SpringBoot yml 配置文件,读取 Windows 系统环境变量

SpringBoot yml 配置文件,读取 Windows 系统环境变量

在 Spring Boot 的 application.yml 配置文件中读取 Windows 系统环境变量,主要使用 ${VARIABLE_NAME} 占位符语法。

🔧 在 yml 文件中引用环境变量

application.yml 中,你可以直接使用 ${环境变量名} 来引用对应的 Windows 系统环境变量。

基本语法:

yaml 复制代码
# 假设 Windows 系统环境变量中设置了 MY_SERVER_PORT=9090
server:
  port: ${MY_SERVER_PORT}

推荐做法:设置默认值

为了防止环境变量未设置导致应用启动失败,强烈建议为占位符提供一个默认值。语法为 ${VARIABLE_NAME:default_value}

yaml 复制代码
# 如果环境变量 MY_SERVER_PORT 未设置,则使用默认值 8080
server:
  port: ${MY_SERVER_PORT:8080}

# 数据库配置的常见用法
spring:
  datasource:
    url: ${DB_URL:jdbc:mysql://localhost:3306/mydb}
    username: ${DB_USERNAME:root}
    password: ${DB_PASSWORD:secret}

在这个例子中,如果系统里设置了 DB_URL,就使用它的值;如果没设置,就使用冒号后面的默认值。

🖥️ 在 Windows 中设置环境变量

你可以通过以下两种主要方式来设置环境变量:

  1. 通过系统设置(永久生效)

    • 右键点击"此电脑"或"我的电脑",选择"属性"。
    • 点击"高级系统设置"。
    • 在"系统属性"窗口中,点击"环境变量"按钮。
    • 在"系统变量"区域,点击"新建"来添加新的环境变量,或"编辑"来修改已有的变量。
    • 设置完成后,需要重启命令行窗口或应用才能生效。
  2. 通过命令行(当前会话生效)

    • 打开命令提示符(CMD)。

    • 使用 set 命令来设置一个临时环境变量,例如:

      cmd 复制代码
      set MY_SERVER_PORT=9090
      set DB_URL=jdbc:mysql://localhost:3306/mydb
    • 这种方式设置的环境变量只在当前命令行窗口有效,关闭窗口后即失效。

💡 在 Java 代码中读取

除了在 yml 文件中引用,你也可以直接在 Java 代码中获取环境变量的值。

  • 使用 @Value 注解

    java 复制代码
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyComponent {
        // 直接注入环境变量,同样可以设置默认值
        @Value("${MY_SERVER_PORT:8080}")
        private int serverPort;
    }
  • 使用 Environment 对象

    java 复制代码
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyComponent {
        @Autowired
        private Environment env;
    
        public void printConfig() {
            // 通过 getProperty 方法获取
            String dbUrl = env.getProperty("DB_URL");
            System.out.println("DB URL: " + dbUrl);
        }
    }
  • 使用 @ConfigurationProperties 注解
    这种方式适合将一组相关的配置属性绑定到一个 Java Bean 中。

⚖️ 配置优先级

了解 Spring Boot 的配置加载顺序非常重要,因为它决定了最终生效的值。当同一个配置项在多个地方被定义时,优先级高的会覆盖优先级低的。

常见的配置源优先级从高到低排列如下:

  1. 命令行参数 (例如 java -jar app.jar --server.port=9091)
  2. 系统环境变量 (例如 set SERVER_PORT=9090)
  3. JAR 包外部的 application.yml
  4. JAR 包内部的 application.yml

这意味着,如果你在命令行中指定了 --server.port=9091,它将覆盖 application.yml 文件中的任何 server.port 配置,以及系统环境变量 SERVER_PORT 的值。

终端获取环境变量命令

在 Windows 系统中,根据你使用的终端类型(CMD 或 PowerShell),获取环境变量的命令有所不同。以下是常用命令汇总:

1. 命令提示符 (CMD)

这是 Windows 最传统的命令行工具。

目的 命令 示例
查看指定变量 echo %变量名% echo %PATH%``echo %JAVA_HOME%
查看所有变量 set `set``set
  • 注意 :在 CMD 中直接输入变量名(如 JAVA_HOME)会报错,必须配合 echo 和百分号使用。

2. PowerShell

这是更现代的命令行工具,功能更强大。

目的 命令 示例
查看指定变量 $env:变量名 $env:PATH``$env:JAVA_HOME
查看所有变量 Get-ChildItem Env: Get-ChildItem Env:``gci env: (简写)

3. 常见环境变量对照表

为了方便你测试,这里列出了一些 Windows 中常见的系统环境变量:

变量名 说明
%PATH% / $env:PATH 可执行文件的搜索路径
%USERPROFILE% / $env:USERPROFILE 当前用户的主目录(如 C:\Users\YourName
%TEMP% / $env:TEMP 存放临时文件的目录
%COMPUTERNAME% / $env:COMPUTERNAME 计算机名称
%JAVA_HOME% / $env:JAVA_HOME Java 开发工具的安装路径(需手动配置)

💡 小贴士

  • 临时与永久 :上述命令查看的是当前会话 生效的变量。如果你在系统设置中修改了环境变量,需要重新打开终端窗口才能看到更新后的值。
  • Linux 用户注意 :Windows CMD 不使用 exportenv 命令,这些是 Linux/Unix 系统的命令。
相关推荐
大黄说说2 小时前
Java集合框架核心解析:从接口设计到ArrayList与LinkedList的性能博弈
后端
IdahoFalls2 小时前
QT-Windows Kits-版本问题:【“_mm_loadu_si64”: 找不到标识符】解决方案[NEW]
开发语言·c++·windows·qt·算法·visual studio
YoungHong19922 小时前
Claude Code & 智谱GLM-5.1 环境配置指南 (Windows/macOS/Ubuntu)
windows·ubuntu·macos
牢七2 小时前
白盒123
linux·windows·microsoft
武藤一雄2 小时前
C# 中精准锁定类型信息指南:typeof vs GetType()
开发语言·windows·c#·.net·.netcore
希望永不加班2 小时前
SpringBoot 跨域问题(CORS)彻底解决方案
java·spring boot·后端·spring
zhuhezhang2 小时前
一个用golang开发的文本对比工具
开发语言·后端·golang·wails