Spring Environment中的屬性源
阿新 • • 發佈:2018-12-03
概述
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 |