1. 程式人生 > >Spring Environment中的屬性源

Spring Environment中的屬性源

概述

Spring通過Environment建模Spring應用執行的環境,主要是各種屬性源以及屬性源中的屬性,其次是使用者指定的default/active profiles

可以簡單地將一個Environment想象成這樣一個容器,裝了以下內容 :

  • 一個屬性源列表(List)
    • 每個屬性源(PropertySource)可以理解為一個Map<String,?>物件,儲存多個屬性名稱/值對
  • 一個 active profile 名稱集合(Set)
  • 一個 default profile 名稱集合(Set)

這篇文章,主要總結一下Spring

Environment中的各種屬性源。

Environment中的屬性源

針對不同的應用型別,Spring對環境的抽象採用了不同的實現類:

  • 針對Spring 非Web 應用 ===> StandardEnvironment
  • 針對Spring Servlet Web 應用 ===> StandardServletEnvironment

StandardEnvironment中的屬性源

名稱 介紹
spring.application.json 系統環境變數spring.application.json
/SPRING_APPLICATION_JSON指定的JSON格式的屬性源
1.可以不指定
systemProperties 來自 system.getProperties()
systemEnvironment 來自 system.getenv()
random 來自一個Random物件,用來生成隨機int/long/uuid
applicationConfig: [classpath:/application-dev1.yml](例) 屬性spring.profiles.active
指定的配置檔案
1.可以不指定,也可以指定多個
2.後讀進來的優先順序較高
3.可以是yml/yaml/properties/xml等檔案型別
applicationConfig: [classpath:/application-common1.yml](例) 屬性spring.profiles.include指定的配置檔案
1.可以不指定,也可以指定多個
2.後讀進來的優先順序較高
3.可以是yml/yaml/properties/xml等檔案型別
applicationConfig: [classpath:/application.yml] 預設配置檔案
可以是yml/yaml/properties/xml等檔案型別

注意: 上表中,各個屬性源行號越小優先順序越高

StandardServletEnvironment中的屬性源

StandardServletEnvironment繼承自StandardEnvironment,它往環境中增加了來自Servlet Web環境的屬性源,並將這些屬性源放在了StandardEnvironment中那些屬性源之前,也就是使之有了更高優先順序。這些屬性源是:

名稱 介紹
server.ports 啟動過程中獲取嵌入式Servlet Web容器所監聽的埠動態生成的一個屬性源:properties={local.server.port=8080}
1.針對Springboot Servlet Web應用的情況
servletConfigInitParams 來自 ServletConfig的屬性源ServletConfigPropertySource
servletContextInitParams 來自 ServletContext的屬性源ServletContextPropertySource
jndiProperties 如果使用了jndi環境的話會新增該屬性源JndiPropertySource

參考資料

Spring屬性源抽象PropertySource