科技改变生活 · 科技引领未来

  • 首页
  • 资讯
  • 技术
  • 百科
  • 问答
  • 学习
  • 看看
  • 站长
  • 生活
  • 快讯

首页 > 看看 > 创业经验

environment environment用英语怎么读

时间:2022-08-20 09:52 作者:王楠东
  • environment的简单介绍

在springboot中environment主要用来保存我们的配置,它主要包括两个方面,profiles 和 properties。profiles指的就是我们的多环境(开发,测试,生成等),切换不同的profiles就会切换不同的bean和配置文件。而properties 就是我们经常使用的key-value键值对集合。

application.run方法

上图就是springboot应用启动过程,包括创建environment,准备创建context,发布监听事件,启动runers (ApplicationRunner、commandLineRunner等启动器)。

  • prepareEnvironment方法过程

getOrCreateEnvironment 整个过程包括创建和配置environment,以及发布environment准备通知事件,我们可以通过监听此事件在代码中新增或者更改我们的environment的环境变量。

1、创建ConfigurableEnvironment。如果是WebApplicationType.SERVLET 就会返回StandardServletEnvironment,因为我们都是springboot web应用程序所以这里返回StandardServletEnvironment。

private ConfigurableEnvironment getOrCreateEnvironment() {   if (this.environment != null) {      return this.environment;   }   if (this.webApplicationType == WebApplicationType.SERVLET) {      return new StandardServletEnvironment();   }   return new StandardEnvironment();}

初始创建的environment

初始创建的environment

2、configureEnviroment配置environment。这里配置包括上面一节提到过的两个功能—property和profiles。这里面只做了初始化的功能,这里并未真正的加载例如application.properties/yml的propeties以及profile。

protected void configureEnvironment(ConfigurableEnvironment environment,      String[] args) {   configurePropertySources(environment, args);   configureProfiles(environment, args);}

3、发布environmentPrepared的ApplicationEnvironmentPreparedEvent事件。

public void environmentPrepared(ConfigurableEnvironment environment) {   for (SpringApplicationRunListener listener : this.listeners) {      listener.environmentPrepared(environment);   }}@Overridepublic void environmentPrepared(ConfigurableEnvironment environment) {this.initialMulticaster.multicastEvent(new ApplicationEnvironmentPreparedEvent(this.application, this.args, environment));}

ApplicationEnvironmentPreparedEvent的监听器

首先会获取到所有的监听器,然后触发这些监听器,这里我们以ConfigFileApplicaationListener

为例,ConfigFileApplicationListener会读取配置文件,并加载到environment中的PropertySources列表中。首先会加载当前激活的profile列表,然后从classpath:/,classpath:/config/,file:./,file:./config/ 找到 application-{profile}的配置文件(可通过spring.config.location 配置文件搜索路径)。

处理environmentPreparedEvent的判断逻辑

** 代码获取所有监听器,遍历循环,执行postProcessEnvironment后置处理 **  private void onApplicationEnvironmentPreparedEvent(      ApplicationEnvironmentPreparedEvent event) {   List postProcessors = loadPostProcessors();   postProcessors.add(this);  ConfigFileApplicationListener本身也是postProcessor   AnnotationAwareOrderComparator.sort(postProcessors);   for (EnvironmentPostProcessor postProcessor : postProcessors) {      postProcessor.postProcessEnvironment(event.getEnvironment(),            event.getSpringApplication());   }}

4、几个常见监听器处理逻辑

SystemEnvironmentPropertySourceEnvironmentPostProcessor:替换系统的环境变量USERDOMAIN_ROAMINGPROFILE -> LLS,JAVA_HOME -> C:Program FilesJavajdk1.8.0_151等。

ConfigFileApplicationListener:添加RandomValuePropertySource,加载profile 例如‘dev’ ,根据这个dev profile环境,加载config文件的property source到environment。下图所示即已加载了多个PropertySource(random、applicaton-docker-dev.yml、application-properties等)

已加载至环境中的PropertySources

扩展:自定义EnvironmentPostProcessor

springboot提供EnvironmentPostProcessor接口用于environment后处理。在实现postProcessEnvironment的方法中可以加载任何想需要的属性到environment中。

public void postProcessEnvironment(ConfigurableEnvironment environment,                                       SpringApplication application) {   Properties pros = new Properties();   pros.setProperty(&34;woshiyizhiwugui&34;, &34;我是一个小乌龟&34;);   PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource(fileName, pros);   environment.getPropertySources().addLast(propertiesPropertySource);environment.setRequiredProperties(&34;helloworld&34;); //设置必须要有的属性,如果未配置,springboot启动异常}

dubbo扩展的DubboDefaultPropertiesEnvironmentPostProcessor

相关话题

  • 复利现值系数表 复利计算公式
  • swot四个字母分别代表什么 swot什么意思中文
  • 土豆怎么做才好吃 土豆最火新吃法
  • 新生儿黄疸正常值 自己在家怎么测黄疸
  • 白鹿洞书院在哪里 《白鹿洞二首》王贞白
  • 泡泡水的制作方法 普通泡泡水的做法
  • c2驾照可以开什么车 c2增驾c1多少钱
  • d二聚体高是什么意思 d二聚体高孕妇的危害
  • 良渚古城遗址位于浙江省哪里 中国浙江良渚古遗址
  • ace是什么意思 ace王牌理财
  • 最准确的万年历老黄历 万年历2022老黄历
  • hms core是什么软件 hms core可以停用吗
  • 除和除以的区别 小学除法中除和除以的区别
  • 政审三代是指哪三代 2022年公务员政审几代
  • 中国人口多少亿人2022 印尼人口多少亿人2022
  • 黄喉是牛的哪个部位 黄喉为什么叫黄喉
  • 世界文化遗产 世界文化遗产50字左右
  • 高级情侣cp昵称 情侣名2022最火一对
  • 我要看免费电影 老阿姨电影免费观看
  • 香水品牌排行榜前十名 香水品牌的十大排行榜

热门推荐

  • 古钟二锅头46度多少钱(全国喝啥酒)
  • 顺丰寄50斤冰箱多少钱(评测五大快递平台)
  • 做饭保姆一个月多少钱(52岁阿姨哭诉)
  • 鹿茸补肾丸多少钱一盒(参茸鞭丸肾阴虚者能吃吗)
  • 北京换烤瓷牙多少钱(明星为整牙有多拼)
  • 乐高培训加盟费多少钱(乐高教育取消授权波及上百门店)
  • 西凤酒15年多少钱一瓶(价不高待客又不失面子的纯粮酒)
  • 聚酰亚胺多少钱一公斤(酶中战斗机)
  • 公司入职体检一般多少钱(通过聘多多找到工作)
  • 插座维修上门多少钱(换个插座还用找电工)
  • 二元店一年挣多少钱(揭秘)
  • ctfau750钻戒多少钱(黑客游戏和解谜游戏的关联之处)
  • 23年工龄退休拿多少钱(缴费23年)
  • 平衡霜多少钱一瓶(日本POLA旗下这个小众牌子THREE)
  • 欧米茄手表电池多少钱一块(福布斯公布运动员收入榜单)
  • 正规医院种植牙多少钱一颗(成本百元却卖上万)
  • 微信能卖多少钱(微信账号被公开买卖)
  • 奔富707多少钱一瓶(宴请时的)
  • 超声波焊接机多少钱一台(关于超声波焊接)
  • 一鸣加盟费要多少钱(一鸣真鲜奶吧多少钱)

王楠东

关注
免责声明:本文章由会员“王楠东”发布,如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务 如因作品内容、版权和其他问题请于本站联系

关注排行榜

  1. 1新百伦多少钱(都有一个)
  2. 2活牛多少钱一斤(牛价丨2月11日)
  3. 3铝单板多少钱一平方(铝单板厂家报价大揭秘)
  4. 4一箱牛奶多少钱(实体店一箱牛奶卖50元)
  5. 5普洱茶一般多少钱(有的普洱茶只要几十有的上万)
  6. 6换手机外屏多少钱(盘点各个旗舰手机换屏价格)
  7. 7一辆电动车多少钱(最低不到8000元)
  8. 8巴宝莉围巾多少钱(花2580元网购的博柏利围巾竟系假货)
  9. 9养老保险每年多少钱(2021年养老保险缴费15年)
  10. 10每升油多少钱(​定了)

编辑精选

Copyright ©2009-2022 KeJiTian.Com, All Rights Reserved

版权所有 未经许可不得转载

增值电信业务经营许可证备案号:辽ICP备14006349号

网站介绍 商务合作 免责声明 - html - txt - xml