SpringBoot文件之Externalized Configuration的閱讀筆記

jackieathome發表於2024-08-18
  • Reference

  • Core Features

  • Externalized Configuration
    SpringBoot應用可以從properties檔案、yaml檔案、環境變數、命令列引數中得到配置引數。

    程式碼裡可以使用註解@Value讀取配置項的值。

    配置項引數的載入順序,後載入的屬性,可以覆蓋已載入的同名屬性的值。

    • 預設配置,透過SpringApplication.setDefaultProperties指定引數值。
    • 使用@PropertySource指定引數值的來源。
    • 配置檔案,比如application.properties或者application.yaml
    • 作業系統的環境變數。
    • Java的系統變數,即System.getProperties()
    • JNDI方式指定的屬性。
    • ServletContext物件配置的引數。
    • ServletConfig物件配置的引數。
    • 使用SPRING_APPLICATION_JSON指定的JSON格式的屬性,對應的命令列變數名為spring.application.json
      使用環境變數,樣例如下:
      SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar myapp.jar
      
      使用JVM的系統變數,樣例如下:
      java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar
      
      使用命令列引數,樣例如下:
      java -jar myapp.jar --spring.application.json='{"my":{"name":"test"}}'
      
    • 命令列引數。
    • 使用@SpringBootTest指定的引數值。
    • 透過使用@DynamicPropertySource,在測試程式碼中指定引數。
    • 透過使用@TestPropertySource,在測試程式碼中指定引數。
    • 開發者工具,支援從$HOME/.config/spring-boot中載入配置引數。

    載入配置檔案的優先順序:

    • Jar檔案內的application.properties或者application.yaml

    • Jar檔案內的application-{profile}.properties或者application-{profile}.yaml

    • Jar檔案外的application.properties或者application.yaml

    • Jar檔案外的application-{profile}.properties或者application-{profile}.yaml

      SpringBoot框架載入配置檔案時,優先讀取properties格式的同名配置檔案。

      在啟動類的main函式中增加如下程式碼,將顯式禁用命令列引數。

      SpringApplication.setAddCommandLineProperties(false);
      

    SpringBoot框架載入application.properties或者application.yaml時,搜尋路徑如下:

    • 類路徑,根路徑。
    • 類路徑,config包。
    • jar檔案所在目錄。
    • jar檔案所在目錄的子目錄config
    • jar檔案所在目錄的子目錄config下的子目錄。

    在命令列中增加引數spring.config.name,可以指定配置檔案的名稱。

    java -jar myproject.jar --spring.config.name=myproject
    

    使用上述樣例啟動應用程式,SpringBoot框架將搜尋並載入配置檔案myproject.properties或者myproject.yaml

    在命令列中增加引數spring.config.location,可以指定配置檔案的搜尋位置,樣例如下:

    java -jar myproject.jar --spring.config.location=\
        optional:classpath:/default.properties,\
        optional:classpath:/override.properties
    

    在配置檔名增加字首optional:,表示假如找不到該位置的配置檔案,並不影響應用程式啟動,不會導致應用程式啟動失敗。

    spring.config.additional-locationspring.config.location的用途相同。

    SpringBoot載入配置檔案的方案,靈活、強大,可依據業務特點酌情使用,不要花費過多的時間。

    EnvironmentPostProcessor允許在SpringBoot應用啟動前修改Environment中定義的屬性的值。

    Java Config涉及如下註解:

    • @Value
    • @ConfigurationProperties
    • @Configuration
    • @EnableConfigurationProperties
    • @Validated
    • @Valid
    • @NotNull

    需要結合樣例、程式碼定義,深入理解上述註解的使用方法。

相關文章