首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring Boot 配置文件完全指南:多環境隔離、優先級機制與最佳實踐

     編輯:Java 綜合教學

配置文件優先級:誰說了算?

Spring Boot 提供層層疊加的配置載入機制,**優先級由高到低**(高優先級覆蓋低優先級):

  1. 命令行參數:java -jar app.jar --server.port=8081
  2. JNDI 屬性:java:comp/env
  3. Java 系統屬性:System.getProperties()、-Dkey=value
  4. 作業系統環境變數:export SERVER_PORT=8081
  5. RandomValuePropertySource:random.* 佔位符
  6. 外部 Profile 配置:application-{profile}.properties/yml (jar 外部)
  7. 內部 Profile 配置:application-{profile}.properties/yml (jar 內部)
  8. 外部通用配置:application.properties/yml (jar 外部)
  9. 內部通用配置:application.properties/yml (jar 內部)
  10. @PropertySource:@Configuration 類註解指定
  11. 默認屬性:SpringApplication.setDefaultProperties()

**實戰建議**:基礎配置放 application.yml,環境差異放 application-dev/prod.yml,敏感資訊(密碼、金鑰)通過**環境變數/命令行/配置中心**注入,絕不提交到版本庫。

多環境配置:Profile 機制

1. 定義 Profile 配置文件

# 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}

2. 啟用 Profile

  • 命令行:java -jar app.jar --spring.profiles.active=prod
  • 環境變數:export SPRING_PROFILES_ACTIVE=prod
  • 代碼:SpringApplicationBuilder().profiles("prod").run()
  • 配置文件:spring.profiles.active=dev (在 application.yml 中)

**多 Profile 同時啟用**:--spring.profiles.active=dev,swagger,mysql,按聲明順序疊加。

3. Profile 分組 (Spring Boot 2.4+)

啟動:--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/ListSpEL 表達式複雜、易錯改用 @ConfigurationProperties 綁定 POJO
Profile 不生效文件命名錯誤、啟用方式錯誤、優先級被覆蓋檢查 application-{profile}.yml 命名、spring.profiles.active 設置
敏感資訊洩露密碼寫在配置文件提交 Git環境變數/配置中心/加密插件 (Jasypt)
隨機值每次啟動不同${random.*} 每次重新生成固定配置勿用 random,測試數據可用



總結

Spring Boot 配置系統以「約定優於配置」為核心,提供**分層優先級、Profile 隔離、類型安全綁定、外部化部署、配置中心整合**完整體系。掌握優先級順序、善用 @ConfigurationProperties、嚴格區分環境配置與敏感資訊、引入配置中心實現動態治理,是構建可維運、可擴展、安全合規微服務的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved