如何在不使用"spring.profiles.active"的情况下加载"applicat



我正在尝试将现有应用程序与Spring Boot集成。我想做的一件事是通过使用通常的 Spring Boot 应用程序配置文件来清理我们加载属性文件的方式,如下所示:

├── application.yaml ├── application-DEV.yaml

问题是我无法spring.profiles.active添加系统属性,因为我依赖于一些现有的基础设施,这些基础设施具有名为environment的系统属性。我正在尝试一种替代解决方案,通过使用ApplicationContextInitializer设置活动配置文件,根据文档:

通常用于需要对应用程序上下文进行某种编程初始化的 Web 应用程序中。例如,针对上下文的环境注册属性源或激活配置文件

这是我的代码,它尝试通过读取environment系统属性来添加活动配置文件:

@Slf4j
public class AddEnvironmentProfileApplicationContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
String environment = System.getProperty("environment");
log.info("Adding active profile from System Property environment={}", environment);
applicationContext.getEnvironment().addActiveProfile(environment);
}
}

我通过使用键org.springframework.context.ApplicationContextInitializerspring.factories定义初始值设定项来加载启动器依赖项。

如果我使用-Denvironment=DEV运行应用程序,我可以看到DEV配置文件已正确添加,但未加载application-DEV.yml文件。

我错过了什么吗?我确实检查了 Spring Boot 的源代码,看起来属性源是在运行初始值设定项之前配置的,但是如果没有加载正确的文件,为什么要使用它定义配置文件呢?这是所需的行为还是错误?

如果您不想将spring.profile.active设置为系统属性,您只需在默认 yml 中执行此操作即可。

spring:
profile:
active: ${environment}

最新更新