购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.11 EnvironmentPostProcessor分析

在前文对EnvironmentPostProcessorApplicationListener进行分析时发现,在处理应用程序环境准备事件(ApplicationEnvironmentPreparedEvent)时需要使用环境后置处理器来进行处理,在前文已经知道Spring Boot中的默认6个环境后置处理器分别是:

(1)CloudFoundryVcapEnvironmentPostProcessor;

(2)ConfigDataEnvironmentPostProcessor;

(3)RandomValuePropertySourceEnvironmentPostProcessor;

(4)SpringApplicationJsonEnvironmentPostProcessor;

(5)SystemEnvironmentPropertySourceEnvironmentPostProcessor;

(6)DebugAgentEnvironmentPostProcessor。

在整个Spring Boot中关于EnvironmentPostProcessor的实现类共有12个,Environment-PostProcessor实现类如图5-4所示。

图5-4 EnvironmentPostProcessor实现类

5.11.1 CloudFoundryVcapEnvironmentPostProcessor分析

本节将对CloudFoundryVcapEnvironmentPostProcessor进行分析,该对象主要处理VCAP(Cloud Foundry)相关的数据。在该对象中主要关注的方法是postProcessEnvironment,具体处理代码如下:

上述代码的主要处理流程如下:

(1)创建属性存储对象,从json解析器工厂中获取json解析器;

(2)获取VCAP_APPLICATION对应的数据,将解析结果加入属性表中,属性表的前缀是vcap.application;

(3)获取VCAP_SERVICES对应的数据,将解析结果加入属性表中,属性表的前缀是vcap.services;

(4)从环境对象中获取属性源对象;

(5)判断属性源对象中是否包含commandLineArgs相关的键值数据,如果存在将数据放入最后,如果不存在则放入第一个。

在第(2)步和第(3)步中数据获取是从环境配置对象中获取,并且设置默认值为"{}"。如果需要使用该对象的技术涉及spring-cloud-cloudfoundry-connector和spring-cloud-springservice-connector的依赖,本节不对技术使用进行说明。

5.11.2 ConfigDataEnvironmentPostProcessor分析

本节将对ConfigDataEnvironmentPostProcessor进行分析,对于该对象主要分析postProcess-Environment方法,详细处理代码如下:

在上述代码中主要的处理流程如下:

(1)获取资源加载器;

(2)获取ConfigDataEnvironment并处理应用。

在上述处理流程中主要关注ConfigDataEnvironment的创建过程,关于该对象的其他内容将在下一节进行分析,详细创建代码如下:

    ConfigDataEnvironment getConfigDataEnvironment(ConfigurableEnvironment environment,
ResourceLoader resourceLoader,
           Collection<String> additionalProfiles) {
         return new ConfigDataEnvironment(this.logFactory, this.bootstrapContext,
    environment, resourceLoader,
               additionalProfiles, this.environmentUpdateListener);
    }

如果在上述处理中出现异常会进行如下处理:

(1)配置profile相关内容;

(2)后处理。

关于第(1)步操作配置profile相关内容,其本质是将方法参数additionalProfiles加入环境变量的激活profile属性中。关于后处理具体处理代码如下:

    private void postProcessUsingLegacyApplicationListener(ConfigurableEnvironment
environment, ResourceLoader resourceLoader) {
         getLegacyListener().addPropertySources(environment, resourceLoader);
    }

在这段代码中创建了LegacyConfigFileApplicationListener并添加了属性。 nCMnHIPGD/Re67GJpx3sAXSHpiBHAjfsU8Hj245i2FADGdBASHgdyGaV8UpJd17E

点击中间区域
呼出菜单
上一章
目录
下一章
×