1. 程式人生 > 實用技巧 >Spring Boot2(012):Profiles

Spring Boot2(012):Profiles

Spring Boot2系列文章可以通過這裡進行回顧:SpringBoot2(001):入門介紹、官網參考和部落格彙總


  本文主要針對SpringBoot 的 Profiles 進行介紹,實際上主要是說明如何啟用某個 profiles 、甚至新增啟用其他更多的 profiles 等,主要參考官方文件: 25. Profiles ,目錄結構如下:

  Spring Profiles 配置檔案提供了用來隔離應用程式部分配置的方法,並使其僅在某些特定環境中可用。任何使用 @Component 或 @Configuration 註解的 bean 都可以標記為 @Profile 來進行載入時的限制。如下例子:

@Configuration
@Profile("production")
public class ProductionConfiguration {

    // ...

}

  開發者可以通過 Environment 環境變數屬性 spring.profiles.active 來指定啟用哪個 profiles 。開發者可以使用本章前面描述的任何方式指定該屬性。例如,可以在 application.properties 中指定:

spring.profiles.active=dev,hsqldb

  還可以通過如下命令列引數來指定:

--spring.profiles.active=dev,hsqldb

1、Adding Active Profiles

  spring.profiles.active 屬性和其他屬性一樣,也遵循配置的優先順序順序,由最高優先順序的 PropertySource 確認。這意味著開發者可以在 application.properties 進行指定,然後在命令列引數中進行替換。

  有時候,在一些場景中,直接在 active profiles 中增加 profile-specific properties 或許比直接替換會更有用。 spring.profiles.include 屬性可以用於無條件地增加 active profiles 。SpringApplication 入口點還有一個用於設定附加 profiles 的 Java API (也就是說,在 spring.profiles.active 屬性啟用的那些 profiles 之上)。參考

SpringApplicationsetAdditionalProfiles() 方法。

  例如,當一個有如下屬性配置的應用通過引數 --spring.profiles.active=prod 進行執行時,proddb 和 prodmq 都會被啟用:

---
my.property: fromyamlfile
---
spring.profiles: prod
spring.profiles.include:
  - proddb
  - prodmq

注:需要注意 spring.profiles 屬性可以在 YAML 文件中定義,以確定該特定配置文件何時被包含在配置中。詳情參考:Section 77.7, “Change Configuration Depending on the Environment”

2、Programmatically Setting Profiles(程式設計式設定 Profiles)

  開發者可以在應用執行之前通過程式設計式呼叫 SpringApplication.setAdditionalProfiles(…​) 的方式設定啟用的 profiles (active profiles)。另外通過 Spring 的 ConfigurableEnvironment 介面來啟用 profiles 也是可行的。

3、Profile-specific Configuration Files

  application.properties (或者 application.yml) 和通過 @ConfigurationProperties 引用到的檔案的配置屬性都會被當作檔案進行載入。詳情參考:Section 24.4, “Profile-specific Properties”或者參考筆者的上一篇部落格中對此的簡要介紹:特定配置屬性 Profile-specific Properties

4、參考