一、理解Environment的设计整体理解
之前我们在分析分析SpringBoot启动配置原理_springboot启动机制-CSDN博客的时候对应Environment已经有一定的了解了,本次对其聚焦进行更加深层次的理解和分析:
Environment模块在 Spring 中主要负责管理应用程序的配置和环境(定义为一组 profile配置文件)相关的信息,每个 profile 对应一个特定的应用程序部署环境,比如开发、测试、生产等。
在这些 profile 中,可以包含各种属性,比如数据库连接信息、服务器端口、日志级别等。而
对应的属性在 Spring 中被表示为键值对,其中键是属性的名称,值是属性的取值。属性可以通过不同的方式进行配置,比如在属性文件中、通过系统属性、操作系统环境变量等。
二、聚焦Profiles分析
专注于 Environment 模块中Profiles 的核心概念,从设计上来看其基本功能的话,个人觉得主要是以下三方面:
- 环境分离与配置隔离: Profiles 允许将不同的配置信息与不同的部署环境(如开发、测试、生产)进行关联。通过定义不同的 profile,可以在不同的环境中使用不同的配置信息,从而实现了环境之间的隔离和配置的分离。这样做有助于提高应用程序的灵活性和可维护性。
- 适应多种环境: Spring Environment 允许为每个 profile 定义不同的配置信息,这使得应用程序可以适应多种不同的部署环境。比如在开发环境中可以使用内存数据库,而在生产环境中则使用真实的数据库。
- 条件化配置: Profiles 支持条件化配置,可以根据运行时的条件选择加载特定的 profile。这可以通过 @Profile 注解或在配置文件中使用 spring.profiles.active 属性来实现。这样可以根据运行时的条件动态地决定使用哪个 profile,进而决定加载哪些配置信息。
这里如果看源码的话,Profiles 是支持继承的,即可以定义一个通用的 profile,并在其他 profile 中引用或继承这个通用的 profile来避免重复定义相似的配置信息。同时Profiles 可以与外部化配置(如属性文件、YAML 文件)结合使用,通过不同的 profile 加载不同的外部化配置文件。
三、聚焦Properties分析
Properties负责管理应用程序的配置信息主要功能如下:
- 抽象化和统一访问: Properties 提供了一个抽象化的方式来管理配置信息,通过统一的接口访问配置信息,使得应用程序不需要关心配置信息的具体来源,可以将其抽象为一组键值对。
- 支持多种配置源: Properties 支持从多种不同的配置源中获取配置信息。这些配置源可以包括属性文件(如 .properties 文件、.yaml 文件)、系统属性、操作系统环境变量等。
- 属性解析和占位符替换: Properties 支持属性解析和占位符替换,可以在配置文件中使用 ${...} 占位符来引用其他配置属性,以及在运行时动态替换这些占位符为实际的属性值。
- 属性优先级: Properties 支持属性优先级设置,可以指定不同来源的属性之间的优先级。例如,系统属性可以优先于配置文件属性,配置文件属性可以优先于默认值。
- 监听器支持: Properties 支持监听器(EnvironmentPostProcessor),可以在 Spring 应用程序启动时对 Properties 进行修改和定制化。
四、Environment类图结构分析
Environment 接口本身是一个顶层接口,Environment 接口的实现类通常是通过组合其他类来实现其功能的,基本关系图梳理如下:(其实这部分读源码理解对平时的开发有很大的指导性,建议直接阅读下并应用到平时的开发中)
整体来看的话,PropertyResolver、ConfigurablePropertyResolver 提供了属性解析和配置属性的功能,Environment 和 ConfigurableEnvironment 则扩展了属性解析器和配置管理器的功能,从而实现了更全面的环境配置。
AbstractEnvironment 、StandardEnvironment 是 Environment 接口的具体实现类,提供了默认的环境配置功能。ConfigurableWebEnvironment、StandardReactiveWebEnvironment 和 StandardServletEnvironment 则是针对特定类型的 Web 应用程序环境配置的具体实现类。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xiaofeng10330111/article/details/138143106