概述
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 |