SpringBoot基础-Spring profile

本文介绍了Spring Boot中Spring Profile的作用和使用方法,包括如何修改默认激活的配置文件以及如何激活特定profile文件。通过源码分析,详细讲解了从`postProcessEnvironment`到`applyToEnvironment`的配置加载过程,解析了如何根据profiles读取和应用配置数据。
摘要由CSDN通过智能技术生成

简介

  • 作用:将不同的配置参数绑定在不同的环境
  • 默认使用application.properties、application-default.properties

使用

修改默认激活的文件

--spring.profiles.default=defaults

在这里插入图片描述
此时会优先加载:application-defaults.yml文件,并且也会加载application.yml文件,如果两个文件存在相同的key值,会使用defaults的文件数据

激活profile文件

spring:
  profiles:
    active: test

这时启动会加载application-test.yml的文件,如果存在相同的key值,会采用默认加载的文件:application.yml文件中的内容

解析分析

源码入口

org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor#postProcessEnvironment(org.springframework.core.env.ConfigurableEnvironment, org.springframework.core.io.ResourceLoader, java.util.Collection<java.lang.String>)

postProcessEnvironment

void postProcessEnvironment(ConfigurableEnvironment environment, ResourceLoader resourceLoader,
		Collection<String> additionalProfiles) {
   
	try {
   
		this.logger.trace("Post-processing environment to add config data");
		resourceLoader = (resourceLoader != null) ? resourceLoader : new DefaultResourceLoader();
		getConfigDataEnvironment(environment, resourceLoader, additionalProfiles).processAndApply();
	}
	catch (UseLegacyConfigProcessingException ex) {
   
		this.logger.debug(LogMessage.format("Switching to legacy config file processing [%s]",
				ex.getConfigurationProperty()));
		postProcessUsingLegacyApplicationListener(environment, resourceLoader);
	}
}

processAndApply

org.springframework.boot.context.config.ConfigDataEnvironment#processAndApply

void processAndApply() {
   
	ConfigDataImporter importer = new ConfigDataImporter(this.logFactory, this.notFoundAction, this.resolvers,
			this.loaders);
	this.bootstrapContext.register(Binder.class, InstanceSupplier
			.from(() -> this.contributors.getBinder(null, BinderOption.FAIL_ON_BIND_TO_INACTIVE_SOURCE)));
	ConfigDataEnvironmentContributors contributors = processInitial(this.contributors, importer);
	Binder initialBinder = contributors.getBinder(null, BinderOption.FAIL_ON_BIND_TO_INACTIVE_SOURCE);
	this.bootstrapContext.register(Binder.class, InstanceSupplier.of(initialBinder));
	ConfigDataActivationContext activationContext = createActivationContext(initialBinder);
	contributors = processWithoutProfiles(contributors, importer, activationContext);
	activationContext = withProfiles(contributors, activationContext);
	contributors = processWithProfiles(contributors, importer, activationContext);
	applyToEnvironment(contributors, activationContext);
}

读取配置文件方法:withProfiles

withProfiles

private ConfigDataActivationContext withProfiles(ConfigDataEnvironmentContributors contributors,
		ConfigDataActivationContext activationContext) {
   
	this.logger.trace("Deducing profiles from current config data environment contributors");
	Binder binder = contributors.getBinder(activationContext, BinderOption.FAIL_ON_BIND_TO_INACTIVE_SOURCE);
	try {
   
		Set<String> additionalProfiles =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值