美文网首页
ConfigurableEnvironment接口

ConfigurableEnvironment接口

作者: engineer_tang | 来源:发表于2022-07-28 15:15 被阅读0次

这是一个配置接口,将由大多数(不是所有)环境类型的实现。提供用于设置活动配置文件和默认配置文件以及操作基础属性源的工具。允许客户端通过ConfigurablePropertyResolver 这个超级接口设置和验证所需属性、自定义转换服务等。

1. 接口说明

接口定义如下:

public interface ConfigurableEnvironment extends Environment, ConfigurablePropertyResolver {

    void setActiveProfiles(String... profiles);

    void addActiveProfile(String profile);

    void setDefaultProfiles(String... profiles);

    MutablePropertySources getPropertySources();

    Map<String, Object> getSystemProperties();

    Map<String, Object> getSystemEnvironment();

    void merge(ConfigurableEnvironment parent);

}

接口类图如下:


image.png

操作属性源
可以删除、重新排序或替换属性源;可以使用从getPropertySources()返回的MutablePropertySources实例添加其他属性源。以下示例与ConfigurableEnvironment的StandardEnvironment实现相反,但通常适用于任何实现,尽管特定的默认属性源可能不同。
示例1: adding a new property source with highest search priority


   ConfigurableEnvironment environment = new StandardEnvironment();
   MutablePropertySources propertySources = environment.getPropertySources();
   Map<String, String> myMap = new HashMap<>();
   myMap.put("xyz", "myValue");
   propertySources.addFirst(new MapPropertySource("MY_MAP", myMap));

示例2: removing the default system properties property source

   MutablePropertySources propertySources = environment.getPropertySources();
   propertySources.remove(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME)

示例3: mocking the system environment for testing purposes


   MutablePropertySources propertySources = environment.getPropertySources();
   MockPropertySource mockEnvVars = new MockPropertySource().withProperty("xyz", "myValue");
   propertySources.replace(StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, mockEnvVars);

当ApplicationContext正在使用环境时,在调用上下文的refresh()方法之前执行任何此类PropertySource操作都很重要。这确保了所有属性源在容器引导过程中可用,包括属性占位符配置器使用。

2. 方法说明

2.1 setActiveProfiles方法

指定此环境的活动配置文件集。在容器引导过程中评估概要文件,以确定是否应该向容器注册bean定义。
任何现有的活动配置文件都将替换为给定的参数;使用零参数调用以清除当前活动配置文件集。使用addActiveProfile添加配置文件,同时保留现有集。

2.2 addActiveProfile方法

将配置文件添加到当前活动配置文件集。

2.3 setDefaultProfiles方法

如果没有其他配置文件通过setActiveProfiles显式激活,则指定默认情况下要激活的配置文件集。

2.4 getPropertySources方法

以可变形式返回此环境的PropertySources,允许在针对此环境对象解析属性时操作应搜索的PropertySource对象集。各种可变属性源方法(如addFirst、addLast、addBefore和addAfter)允许对属性源排序进行细粒度控制。例如,这有助于确保某些用户定义的特性源的搜索优先级高于默认特性源,例如系统特性集或系统环境变量集。

2.5 getSystemProperties方法

如果当前SecurityManager允许使用,返回System.getProperties()的值,否则返回一个映射实现,该实现将尝试通过调用System.getProperty(String)来访问各个键。

请注意,大多数环境实现都将此系统属性映射作为要搜索的默认属性源。因此,除非明确打算绕过其他属性源,否则建议不要直接使用此方法。

调用Map.get(Object)在返回的Map上永远不会抛出IllegalAccessException;在SecurityManager禁止访问属性的情况下,将返回null,并发出信息级日志消息,指出异常。

2.6 getSystemEnvironment方法

如果当前SecurityManager允许,返回 System.getenv()的值,否则返回一个映射实现,该实现将尝试使用对System.getenv(String)的调用来访问各个键。

注意,大多数环境实现将包括此系统环境映射作为要搜索的默认属性源。因此,除非明确打算绕过其他财产来源,否则建议不要直接使用此方法。

调用Map.get(Object) 在返回的地图上永远不会抛出IllegalAccessException;在SecurityManager禁止访问属性的情况下,将返回null,并发出信息级日志消息,指出异常。

2.7 merge方法

将给定父环境的活动配置文件、默认配置文件和属性源附加到此(子)环境各自的集合中。
对于父实例和子实例中存在的任何同名PropertySource实例,将保留子实例,并丢弃父实例。这可以允许子级重写属性源,并避免通过常见属性源类型(例如系统环境和系统属性)进行冗余搜索。
活动和默认配置文件名称也会被过滤掉,以避免混淆和冗余存储。
在任何情况下,父环境都保持不变。请注意,在调用合并后对父环境所做的任何更改都不会反映在子环境中。因此,在调用merge之前,应小心配置父属性源和配置文件信息。

相关文章

  • ConfigurableEnvironment接口

    这是一个配置接口,将由大多数(不是所有)环境类型的实现。提供用于设置活动配置文件和默认配置文件以及操作基础属性源的...

  • SpringBoot启动流程事件源码解析

    Spring启动流程 启动 => 环境准备阶段(ConfigurableEnvironment) => 上下文准备...

  • 接口接口接口

    发现很多朋友对于接口都很纠结,阐述一下个人对接口的理解。 接口分为很多种类型,程序语言内部接口 移动端和服务端接口...

  • Android常用接口

    不知名接口 头条接口: 科技接口: 财经接口: 军事接口: 体育接口: 房产接口: 足球接口: 娱乐接口: 电影接...

  • 第十八天 微信微博天气接口

    分享接口 微信接口 微博接口 天气接口 mob接口

  • 接口测试概述

    接口(interface)的概念 常见接口名词 接口测试: 接口测试目的: 接口测试的重要性: 接口测试流程 接口...

  • 接口测试

    接口测试概念: 接口:接口是为了提供一种服务 所有的接口统称为API,接口分为内部接口和外部接口 外部接口:测试被...

  • 接口

    接口 接口类型 空接口 接口嵌套 接口断言 type关键字

  • 线程池原理

    Callable 接口 Runnable 接口 Future接口 RunnableFuture 接口 Future...

  • JMeter-一个接口的返回值作为输入传给其他接口

    背景: 在用JMeter写接口case,遇到一种情况,接口1查看列表接口,接口2查看详情接口,接口2需要传入接口1...

网友评论

      本文标题:ConfigurableEnvironment接口

      本文链接:https://www.haomeiwen.com/subject/pjkqwrtx.html