天天看點

SpringBoot基礎之配置詳解

大家好,我是二師兄,本篇文章為大家講解SpringBoot相關配置功能,包括配置檔案、外部配置、屬性注入等。

配置檔案

基本配置支援

建立SpringBoot項目,會在src/main/resources目錄下生成application.properties檔案,這就是SpringBoot預設指定的配置檔案。基本使用方式如下:

同時,SpringBoot也支援YAML格式的配置,同樣将application.yml檔案放置在resources目錄下即可。YAML是以資料為中心的語言,配置的時候具有面向對象的特性。這兩種配置形式都是SpringBoot推薦的,但對于比較複雜的資料來說,yaml的配置要優于properties。yaml配置具體示例:

YAML基本要求:

YAML大小寫敏感;

使用縮進代表層級關系;

縮進隻能使用空格,不能使用TAB,不要求空格個數,隻需要相同層級左對齊(一般2個或4個空格)

如果一個項目中同時出現application.properties和application.yml檔案配置的話,SpringBoot會如何處理呢?會優先使用properties中屬性,然後再考慮使用yml檔案中的屬性。比如,上面的例子中,如果properties中不配置port,而yml配置port為8081,則啟動後端口為8081,但是如果properties中配置為8080,則啟動時以properties為準。

配置檔案源代碼解析

為什麼我們将配置檔案放置在resources目錄下,SpringBoot就可以幫忙我們進行解析加載?下面通過源代碼看一下SpringBoot預設會掃描哪些路徑下的哪些配置檔案。來看一下ConfigFileApplicationListener類,該類在spring-boot包下,通過該類的注釋可以了解到基本的加載資訊。

通過該類的常量定義,我們可以看到,預設加載的配置檔案名為application,會加載以下目錄下的配置檔案:classpath目錄、classpath目錄下的config目錄、工程根目錄下、工程根目錄的config目錄下。

它們的優先級依次為:

工程根目錄:./config/

工程根目錄:./

classpath:/config/

classpath:/

SpringBoot也支援通過指令來指定配置檔案的位置:

使用xml配置

當無法避免使用xml配置時,可以采用@ImportResources來進行xml配置的加載。

指令行參數配置

除了上面的參數配置之外,SpringBoot還提供了指令參數配置,比如在運作jar -jar時可以添加一些額外的參數來進行指定。

此種方式的優先級最高。

自定義配置屬性

除了可以按照SpringBoot的約定配置參數之外,我們還可以自定義一些參數,然後通過@Value或@ConfigurationProperties進行配置。也可以不使用預設的配置檔案名,而通過@PropertiesSource進行配置檔案路徑的指定。

@Value注入屬性值

在application配置檔案中自定義好具體的屬性,然後通過@Value注解在需要使用的地方進行注入。屬性的自定義:

在需要對應屬性的地方注解使用,其中在表達冒号後面的Guest為指定的預設值,即如果找不到admin.name,則使用此預設值。

@ConfigurationProperties配置

SpringBoot還提供了基于類型安全的配置方式,通過@ConfigurationProperties将一組配置和一個Bean關聯起來,批量進行類型安全的自動注入。

其中,@Component表示将此類執行個體化,@PropertySource指定自定義的properties檔案,@ConfigurationProperties(prefix =“admin”)指定實作配置屬性和bean直接的關聯,prefix指定比對屬性的字首都以admin開始。

@ConfigurationProperties的使用支援松散綁定,如:駝峰命名(userName)、橫幹拼接(user-name)、下劃線(user_name)之間可以互相識别綁定。

綁定對象的使用:

profile配置

在真是實踐中,我們的配置檔案會根據不同的環境有不同的配置檔案,SpringBoot也為我們準備好了相應的配置。首先不同環境的配置按照指定的格式進行命名。比如:

開發環境:application-dev.properties

測試環境:application-test.properties

生産環境:application-prod.properties

Spring Boot 則通過 application.properties 檔案中設定 spring.profiles.active 屬性來指定加載檔案。比如 ,參數值配置為 dev ,則加載的是 application-dev.properties 。