【问题标题】:Spring boot, environment specific properties locationSpring boot,环境特定的属性位置
【发布时间】:2016-08-12 13:23:45
【问题描述】:

我可以看到很多关于环境特定属性的帖子,但没有一个能完全解决我的问题。

我正在开发我的 Spring Boot 应用程序,其中包含两个配置文件 dev/live。

我希望我的项目具有以下结构:

--deployment
  --dev
    --myapp.properties
  --live
    --myapp.properties
--src
  --main
    --java
    --resources
  --test
    --java

我知道如果我的资源文件夹中有两个application.properties,比如application-live.propertiesapplication-dev.properties,我就可以告诉maven 在应用程序启动时选择哪一个:

Dspring.profiles.active=profile_name

但我不喜欢这个通用属性文件的名称。所以我找到了这种方法来告诉应用程序在哪里寻找 /deployment/<profile>/ 中的配置文件特定属性。

我是使用 Maven 构建任务配置完成的:

<build>
    <resources>
        <resource>
            <directory>deployment/${environment}</directory>
            <includes>
                <include>*.properties</include>
                <include>*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

这将在deployment/&lt;profile&gt; 中搜索资源并包含它们。好消息是 Maven 找到了正确的环境属性文件,但不幸的是它将它们包含在 target/classes/myapp.properties 中,这对于 Spring Boot 来说似乎是不可见的?如何告诉 Maven 将其放在与 application.properties 相同的目录中,或者如何告诉 Spring Boot 找到它当前所在的位置?

非常感谢!

【问题讨论】:

    标签: java maven properties spring-boot


    【解决方案1】:

    如何告诉 Maven 将其放置在与 application.properties 相同的目录中,或者如何告诉 Spring Boot 找到它当前所在的位置?

    1) 你不需要修改 Maven 设置,因为它将配置文件放置在正确的位置:target/classes 是类路径的根目录,因为该目录中的所有文件都将复制到你的 WEB-INF/classes 目录中WAR/JAR 文件。

    2) 要更改属性文件的名称,您可以使用spring.config.name 属性,将其显式传递为-Dspring.config.name=myapp 或环境变量SPRING_CONFIG_NAME=myapp。更多信息可以在官方文档的Change the location of external properties of an application章节中找到。

    【讨论】:

    • 如果我想要多个属性文件,而不仅仅是一个怎么办?我为每种环境选择一种类型。
    • 不支持多个application.properties 文件。但是您可以在application.properties 中定义通用参数,在application-{profile}.properties 文件中定义其他配置文件特定参数。
    • 好吧,我决定采用“application-{profile}.properties”解决方案。我的“/部署”下仍然有这些配置文件特定的属性。谢谢。
    猜你喜欢
    • 2014-09-07
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2016-08-08
    • 2018-03-22
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多