springboot环境变量(environment)加载源码分析

代码入口

//SpringApplication run 环境变量初始化入口
prepareEnvironment(listeners, bootstrapContext, applicationArguments)

//prepareEnvironment 分步加载环境变量
private ConfigurableEnvironment prepareEnvironment(SpringApplicationRunListeners listeners,
			DefaultBootstrapContext bootstrapContext, ApplicationArguments applicationArguments) {
		//创建和初始化-环境变量对象
		ConfigurableEnvironment environment = getOrCreateEnvironment();
		
		configureEnvironment(environment, applicationArguments.getSourceArgs());
		ConfigurationPropertySources.attach(environment);
		listeners.environmentPrepared(bootstrapContext, environment);
		DefaultPropertiesPropertySource.moveToEnd(environment);
		configureAdditionalProfiles(environment);
		bindToSpringApplication(environment);
		if (!this.isCustomEnvironment) {
			environment = new EnvironmentConverter(getClassLoader()).convertEnvironmentIfNecessary(environment,
					deduceEnvironmentClass());
		}
		ConfigurationPropertySources.attach(environment);
		return environment;
	}

创建和初始化-环境变量对象

//根据应用类型不同,创建不同的环境变量对象
//环境变量的来源属性值来源不同,内部有许多(List)PropertySource,分别保存
private ConfigurableEnvironment getOrCreateEnvironment() {
		if (this.environment != null) {
			return this.environment;
		}
		switch (this.webApplicationType) {
		case SERVLET:
		    //web应用环境变量类型
		    //加载systemProperties,systemEnvironment
		    //加载servletConfigInitParams,servletContextInitParams
			return new StandardServletEnvironment();
		case REACTIVE:
		    //响应应用环境变量类型
			return new StandardReactiveWebEnvironment();
		default:
		    //只是启动一个容器的应用
		    //加载systemProperties,systemEnvironment
			return new StandardEnvironment();
		}
	}
	
1.StandardEnvironment加载一些系统环境变量参数即可
2.StandardServletEnvironment是一个web应用,自然还有一些web相关的环境变量参数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值