【问题标题】:Configure resources differently for each profile in spring-boot在 spring-boot 中为每个配置文件配置不同的资源
【发布时间】:2019-09-19 07:14:55
【问题描述】:

我需要设置我的 spring-boot 项目,如果您使用配置文件“本地”启动它,则不接受任何“外部”.properties 文件(与 jar 放在同一目录中)。但是,当使用任何其他配置文件启动 jar 时,它们应该被接受。

我发现的所有问题都只涉及在项目结构中配置“内部”资源。我不知道如何告诉应用程序是否也接受这样的“外部”文件。

【问题讨论】:

    标签: maven spring-boot spring-boot-maven-plugin


    【解决方案1】:

    Spring boot 支持使用--spring.config.location属性进行外部配置

    如果可以指向实际文件、文件夹或它们的任意组合。

    这些属性文件中的值将覆盖来自内部配置位置的值。

    确保你已经阅读了documention的相关章节

    更新: 正如我所评论的那样,“抑制”外部配置是不可能的。 但是,作为一种解决方法,您可以考虑实现一个 EnvironmentPostProcessor,它将动态添加配置文件。

    它在环境可用之后但在 spring 实际处理它的 bean 之前运行;简而言之,它提供了一种自定义配置的方法。

    所以这可能依赖于以下假设:

    • 一个名为“application-external.properties”的外部文件

    • 应用程序始终以--spring.config.locations=<path_to_external_folder>启动

    • 除了上述指定配置文件: --spring.profiles.active=local 这将加载内部可用的application.propertiesapplication-local.properties,但不会触及外部文件,除非在后处理器中添加类似(伪代码)的内容:

      if(! getActiveProfiles().contains("local")) { addProfile("external"); }

    您可以阅读环境后处理器Here

    【讨论】:

    • @Medwe 想要告诉应用程序不要使用外部配置的配置。在这种情况下你的答案是正确的吗?
    • 遗憾的是它不正确,我需要一个特定的配置文件才能不接受外部配置。
    • 我不认为 spring boot 允许在指定外部配置后“抑制”它们。这就像说“我想使用配置 X 运行,但请不要处理它”。听起来很奇怪,不是吗?最好的解决方案 IMO 将在启动应用程序并检查是否应设置外部配置的脚本中设置一些条件。话虽如此,@Medwe,您能否详细说明您的用例,我从来没有满足过这样的要求,也许它可以用不同的方式解决......
    • @Medwe,我发布了一种可能的解决方法。请检查一下
    • 据我了解,这并不能解决我们的问题,尽管它可能已经回答了我的问题。在您的解决方案中,仍然有一种方法可以在启动本地配置文件时“注入”属性,只需以不同的方式命名文件即可。由于启动本地配置文件时没有身份验证,我们不希望将外部属性文件加载到应用程序中,因为您可以更改数据库 URL,例如。
    猜你喜欢
    • 1970-01-01
    • 2018-06-20
    • 2020-08-23
    • 2014-08-15
    • 2017-07-13
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    相关资源
    最近更新 更多