基于系统环境变量加载Spring-Boot application.yaml文件

时间:2016-01-12 06:09:10

标签: java spring

我的朋友和我正在开发一个Spring-Boot应用程序。现在,在运行mvn spring-boot:run时,Spring-Boot默认情况下会在src/main/resources/config下加载application.yaml文件。

我的朋友和我有一个名为'DEV'设置的系统环境变量。因此,在命令行中输入echo $DEV将返回dev.frienddev.mmp

src/main/resources/config下,我们要添加目录/dev/friend/dev/mmp。在这些目录中,将有一个特定的application.yaml文件。

现在我们有了这个:

  • SRC
      • 资源
        • 配置
          • application.yaml
          • dev的
            • 朋友
              • application.yaml
            • MMP
              • application.yaml

我们如何仅使用注释设置Spring配置(我们希望避免再写pom.xml以外的xml),这样当我们运行mvn spring-boot:run时,加载的application.yaml文件将基于在当前计算机的DEV环境变量上。

我们知道我们可以执行以下操作从DEV变量创建FileSystemResource:

public FileSystemResource configLoader() throws IOException {
    StringBuilder path;
    URL propertiesURL;
    String hostName = System.getenv("DEV");
    path = new StringBuilder("/config");
    if (hostName != null && !hostName.isEmpty()) {
        String[] hostNameParts = hostName.split("\\.");
        for (String s : hostNameParts) {
            path.append('/').append(s);
        }
    }
    path.append('/').append("application.yaml");
    propertiesURL = getClass().getResource(path.toString());
    return new FileSystemResource(propertiesURL.getFile());
}

但是我们不知道如何继续,这是我们的第一个Spring项目。 Google搜索只会导致示例加载位于application.yaml下的默认config/(我们已经拥有)并且这不是我们想要的。我们想要扩展它,以便我们的登台服务器将拥有自己的DEV系统变量,我们可以在config下添加另一个目录(如上所述)和application.yaml文件。

2 个答案:

答案 0 :(得分:3)

application.yml个文件外,还可以使用命名约定application-{profile}.yml定义特定于配置文件的 yamls。因此,最好将三个yaml配置定义如下:application.ymlapplication-devfriend.ymlapplication-devmmp.yml

如果您未激活任何配置文件,默认情况下将加载application.yml。如果您激活devfriend个人资料,application-devfriend.yml的配置值将覆盖application.yml个。要激活一个配置文件,请使用spring.profiles.active属性。例如:

java -jar -Dspring.profiles.active=devfriend yourapp.jar

您还可以为spring-profiles-active添加环境变量。

更新:如果您坚持使用DEV环境变量切换配置文件,请在application.yml中添加:

spring:
  profiles:
    active: ${dev}

答案 1 :(得分:1)

您可以使用:

@ConfigurationProperties(locations = {"yourProperties"}) //create this path as a String above

指定Spring Boot将从配置类加载的位置。

更多信息:Spring External Config

或者,在命令行中,您可以使用属性来提及其他引导配置文件:

--spring.config.name="file:/path/to/application.yaml"