# Springboot yml怎麼獲取系統環境變量的值
## 引言
在現代應用開發中,**配置管理**是至關重要的一環。Spring Boot作為Java生態中最流行的框架之一,提供了強大的配置管理能力,其中`application.yml`(或`application.properties`)是默認的配置文件格式。而將系統環境變量與YAML配置結合使用,可以實現更靈活的部署方案。本文將深入探討如何在Spring Boot的YAML配置中獲取系統環境變量的值。
---
## 目錄
1. [環境變量與配置的關係](#環境變量與配置的關係)
2. [YAML基礎語法回顧](#yaml基礎語法回顧)
3. [Spring Boot中引用環境變量](#spring-boot中引用環境變量)
- [3.1 直接引用語法](#31-直接引用語法)
- [3.2 默認值設置](#32-默認值設置)
- [3.3 嵌套屬性引用](#33-嵌套屬性引用)
4. [操作系統環境變量設置](#操作系統環境變量設置)
- [4.1 Linux/Mac](#41-linuxmac)
- [4.2 Windows](#42-windows)
5. [高級用法](#高級用法)
- [5.1 多環境配置](#51-多環境配置)
- [5.2 自定義前綴](#52-自定義前綴)
- [5.3 加密處理](#53-加密處理)
6. [調試與常見問題](#調試與常見問題)
7. [最佳實踐](#最佳實踐)
8. [總結](#總結)
---
## 環境變量與配置的關係
系統環境變量是操作系統級別的鍵值對存儲,具有以下特點:
- **全局可見性**:所有進程均可訪問
- **運行時注入**:無需修改代碼即可改變應用行為
- **安全性**:敏感信息可避免硬編碼
在Spring Boot中,環境變量的優先級高於`application.yml`中的配置(遵循[特定優先級規則](https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config))。
---
## YAML基礎語法回顧
YAML(YAML Ain't Markup Language)是常用的配置文件格式,比Properties文件更具可讀性:
```yaml
server:
port: 8080
servlet:
context-path: /api
對比Properties等效配置:
server.port=8080
server.servlet.context-path=/api
Spring Boot中引用環境變量
3.1 直接引用語法
在YAML中使用${VARIABLE_NAME}語法引用環境變量:
database:
url: ${DB_URL}
username: ${DB_USER}
password: ${DB_PASSWORD}
當環境變量未設置時,啓動會報錯。可通過:指定默認值。
3.2 默認值設置
app:
cache-size: ${CACHE_SIZE:100} # 默認值100
3.3 嵌套屬性引用
spring:
datasource:
url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME}
操作系統環境變量設置
4.1 Linux/Mac
# 臨時設置
export DB_URL=jdbc:mysql://localhost:3306/mydb
# 永久設置(添加到~/.bashrc或~/.zshrc)
echo "export DB_USER=admin" >> ~/.bashrc
source ~/.bashrc
4.2 Windows
:: 臨時設置
set DB_PASSWORD=secret
:: 永久設置(系統屬性→高級→環境變量)
高級用法
5.1 多環境配置
結合spring.profiles.active使用:
# application-dev.yml
database:
url: ${DEV_DB_URL}
# application-prod.yml
database:
url: ${PROD_DB_URL}
激活方式:
java -jar app.jar --spring.profiles.active=prod
5.2 自定義前綴
通過@ConfigurationProperties實現:
@Configuration
@ConfigurationProperties(prefix = "myapp")
public class AppConfig {
private String apiKey;
// getters & setters
}
YAML配置:
myapp:
api-key: ${API_KEY}
5.3 加密處理
使用Jasypt等工具加密敏感數據:
database:
password: ENC(${ENCRYPTED_DB_PASSWORD})
調試與常見問題
查看實際加載的配置:
@SpringBootApplication
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args)
.getEnvironment().getPropertySources().forEach(ps -> {
System.out.println(ps.getName() + ": " + ps.getSource());
});
}
}
常見錯誤: 1. Could not resolve placeholder - 環境變量未設置且無默認值 2. 變量名大小寫不匹配(Linux區分大小寫) 3. 特殊字符未轉義
最佳實踐
- 敏感信息:永遠不要將密碼等寫入版本控制
- 命名規範:使用大寫+下劃線命名環境變量(如
DB_HOST) - 文檔化:維護
config/README.md説明必需的環境變量 - 容器化支持:Docker/K8s中通過
envFrom注入
總結
通過本文我們系統學習了: - YAML中引用環境變量的基礎語法 - 多環境配置管理策略 - 實際部署時的操作系統設置 - 高級應用場景和調試技巧
掌握這些技能後,你的Spring Boot應用將獲得更強的環境適應能力,實現真正的”一次構建,到處運行”。