如何在不使用`spring.profiles.active`的情况下加载`application- {profile} .yml`属性来源?

时间:2017-06-07 09:48:10

标签: spring spring-boot

我正在尝试将现有应用程序与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.factoriesorg.springframework.context.ApplicationContextInitializer中定义初始化程序来加载启动程序依赖项。

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

我错过了什么吗?我确实检查了Spring Boot的源代码,看起来在运行Initializers之前配置了Property Sources,但是如果没有加载正确的文件,为什么要用它定义一个profile呢?这是期望的行为还是可能是一个错误?

1 个答案:

答案 0 :(得分:0)

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

spring:
  profile:
    active: ${environment}