Environment = Property + Profile
Spring Boot 中,默认使用的 Environment 的实现类是 StandardServletEnvironment,我们可以通过它的类图了解 Spring Boot 中的 Environment 是如何管理的。
PropertyResolver 接口负责 Property 的获取(通过 key 获得 value),Environment 继承了这个接口,加入获得 Profile 的内容。ConfigurablePropertyResolver 继承了 PropertyResolver,为了解决 Property 的获取过程中涉及到的数据类型的转换和${..}表达式的解析问题。ConfigurableEnvironment 在此基础上,加入了 Profile 的设置功能。ConfigurableWebEnvironment 扩展了 web 功能,将servlet 上下文作为配置源。
AbstractEnvironment,StandardEnvironment,StandardServletEnvironment 都是 Spring 对上述功能的实现。
Spring Boot 中的配置来自哪里?
Spring Boot 中的配置来自不同的地方,最常见的来自于 application.properties、application.yaml、环境变量和命令行参数。我们可以在 Spring Boot 的官方文档看到各种各样的配置方式。
官方一共给出了 14 中配置方式,并且给出了配置的优先级。数字越大优先级越高。
通过硬编码的方式(SpringApplication.setDefaultProperties)进行配置。