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 中设置环境变量
你可以通过以下两种主要方式来设置环境变量:
-
通过系统设置(永久生效)
- 右键点击"此电脑"或"我的电脑",选择"属性"。
- 点击"高级系统设置"。
- 在"系统属性"窗口中,点击"环境变量"按钮。
- 在"系统变量"区域,点击"新建"来添加新的环境变量,或"编辑"来修改已有的变量。
- 设置完成后,需要重启命令行窗口或应用才能生效。
-
通过命令行(当前会话生效)
-
打开命令提示符(CMD)。
-
使用
set命令来设置一个临时环境变量,例如:cmdset MY_SERVER_PORT=9090 set DB_URL=jdbc:mysql://localhost:3306/mydb -
这种方式设置的环境变量只在当前命令行窗口有效,关闭窗口后即失效。
-
💡 在 Java 代码中读取
除了在 yml 文件中引用,你也可以直接在 Java 代码中获取环境变量的值。
-
使用
@Value注解javaimport org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class MyComponent { // 直接注入环境变量,同样可以设置默认值 @Value("${MY_SERVER_PORT:8080}") private int serverPort; } -
使用
Environment对象javaimport 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 的配置加载顺序非常重要,因为它决定了最终生效的值。当同一个配置项在多个地方被定义时,优先级高的会覆盖优先级低的。
常见的配置源优先级从高到低排列如下:
- 命令行参数 (例如
java -jar app.jar --server.port=9091) - 系统环境变量 (例如
set SERVER_PORT=9090) - JAR 包外部的
application.yml - 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 不使用
export或env命令,这些是 Linux/Unix 系统的命令。