Spring Boot 提供層層疊加的配置載入機制,**優先級由高到低**(高優先級覆蓋低優先級):
java -jar app.jar --server.port=8081java:comp/envSystem.getProperties()、-Dkey=valueexport SERVER_PORT=8081random.* 佔位符application-{profile}.properties/yml (jar 外部)application-{profile}.properties/yml (jar 內部)application.properties/yml (jar 外部)application.properties/yml (jar 內部)@Configuration 類註解指定SpringApplication.setDefaultProperties()**實戰建議**:基礎配置放 application.yml,環境差異放 application-dev/prod.yml,敏感資訊(密碼、金鑰)通過**環境變數/命令行/配置中心**注入,絕不提交到版本庫。
# application.yml (通用)
app:
name: MyService
version: 1.0.0
---
# application-dev.yml
spring:
profiles: dev
datasource:
url: jdbc:h2:mem:devdb
username: sa
password:
---
# application-prod.yml
spring:
profiles: prod
datasource:
url: jdbc:mysql://prod-db:3306/app
username: ${DB_USER}
password: ${DB_PASS}
java -jar app.jar --spring.profiles.active=prodexport SPRING_PROFILES_ACTIVE=prodSpringApplicationBuilder().profiles("prod").run()spring.profiles.active=dev (在 application.yml 中)**多 Profile 同時啟用**:--spring.profiles.active=dev,swagger,mysql,按聲明順序疊加。
啟動:
--spring.profiles.active=production等同於啟用三個 Profile。YAML 進階語法與類型安全綁定
1. 佔位符與隨機值
@Component @ConfigurationProperties(prefix = "app.datasource") @Data // Lombok public class DataSourceConfig { private String url; private String username; private String password; private int maxPoolSize = 10; // 有預設值 private Duration connectionTimeout = Duration.ofSeconds(30); // 類型安全 private List<String> tags = new ArrayList<>(); // 集合注入 private Map<String, String> properties = new HashMap<>(); // Map 注入 }啟用:
@EnableConfigurationProperties(DataSourceConfig.class)或掃描 @Component。優勢:IDE 提示、編譯期檢查、自動類型轉換、驗證 (JSR-303)、文檔生成。3. YAML 列表與 Map 合併行為
@Value 無法注入 Map/List SpEL 表達式複雜、易錯 改用 @ConfigurationProperties 綁定 POJO Profile 不生效 文件命名錯誤、啟用方式錯誤、優先級被覆蓋 檢查 application-{profile}.yml命名、spring.profiles.active設置敏感資訊洩露 密碼寫在配置文件提交 Git 環境變數/配置中心/加密插件 (Jasypt) 隨機值每次啟動不同 ${random.*}每次重新生成固定配置勿用 random,測試數據可用 總結
Spring Boot 配置系統以「約定優於配置」為核心,提供**分層優先級、Profile 隔離、類型安全綁定、外部化部署、配置中心整合**完整體系。掌握優先級順序、善用
@ConfigurationProperties、嚴格區分環境配置與敏感資訊、引入配置中心實現動態治理,是構建可維運、可擴展、安全合規微服務的基石。