概述
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 Environment中属性源的组织方式,包括StandardEnvironment和StandardServletEnvironment的区别,以及属性源的优先级和来源,如systemProperties、systemEnvironment、random等。
841

被折叠的 条评论
为什么被折叠?



