我正在尝试将现有应用程序与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);
}
}
我通过使用键spring.factories
在org.springframework.context.ApplicationContextInitializer
中定义初始化程序来加载启动程序依赖项。
如果我使用-Denvironment=DEV
运行应用程序,我可以看到DEV
配置文件已正确添加,但未加载application-DEV.yml
文件。
我错过了什么吗?我确实检查了Spring Boot的源代码,看起来在运行Initializers之前配置了Property Sources,但是如果没有加载正确的文件,为什么要用它定义一个profile呢?这是期望的行为还是可能是一个错误?
答案 0 :(得分:0)
如果您不想将spring.profile.active
设置为系统属性,则只需在默认的yml中执行此操作。
spring:
profile:
active: ${environment}