gpt4 book ai didi

spring - 通过 Spring Boot starter 包含配置文件

转载 作者:行者123 更新时间:2023-12-05 06:33:28 28 4
gpt4 key购买 nike

我在使用自定义 Spring Boot 启动程序时遇到问题。启动器如何导致包含配置文件并从配置服务器中提取相关配置?

也许我的用例是独一无二的,因为我没有在网上找到任何有用的信息。我在企业环境中工作,这个启动器供我的团队使用,因此我们能够控制一些在开源世界中可能没有意义的东西(比如配置文件名称)。

场景如下:我们有一个 Spring Cloud Config Server 正在运行以提供配置。在我们的 Spring Boot 项目中,我们对某些配置文件名称(例如“prod”和“nonprod”)进行了标准化,以控制我们不同环境中的配置。我正在尝试创建一个 starter 来提供可重用的功能。出于示例目的,假设我正在创建一个启动器,它为为我们执行加密工作的设备提供接口(interface)。此启动器将需要设备的 IP 地址以及生产和非生产之间不同的各种其他配置。

在配置仓库中,我将拥有 application.yml、application-nonprod.yml、application-nonprodEncryption.yml 等文件

我的目标是让自定义加密启动器在应用程序中包含该启动器时自动包含 nonprodEncryption 配置文件。通过这样做,不需要加密的应用程序不会加载与加密相关的属性。

到目前为止,这是我的实验结果:

  • 在应用程序的 bootstrap.yml 中,我可以放置一个 block ,例如

    spring.profiles: nonprod
    spring:
    profiles:
    include:
    - nonprodEncryption

    这会产生所需的结果(即 application-nonprodEncryption.yml 文件从配置服务器加载并使用),但这是一个不受欢迎的解决方案,因为每个使用我的自定义启动器的应用程序都需要包含此样板配置。

  • 当我将上面的配置移动到starter的bootstrap.yml中时,好像没有效果。

  • 当我将上述配置移动到启动器的 application.yml 时,它似乎已被应用(即它显示在 The following profiles are active: 列表中),但它是在生命周期中为时已晚,无法从配置服务器中提取适当的配置。

我考虑过的其他事情:

  • 为什么不将所有配置放入主配置文件配置文件(例如 application-nonprod.yml)?从关注点和维护的角度来看,我想将各个启动器的配置彼此隔离。此外,一些配置数据比其他配置数据更敏感,所以我不喜欢将所有配置公开给所有应用程序的想法,因为许多应用程序不需要一些更敏感的配置。是的,他们可以得到它,但如果他们不需要它,为什么要把它加载到他们的内存中呢?

  • 为什么不在我们启动应用程序时指定额外的配置文件?这些应用程序将在云平台上运行。该平台将根据应用程序运行的层将“prod”或“nonprod”指定为配置文件。我想在平台级别而不是应用程序级别管理它,所以我想要应用程序提供的配置文件列表launch 以在所有应用程序中保持一致(例如,将 nonprodEncryption 添加到列表中只会让我陷入与上述相同的情况 - 所有应用程序都将具有所有配置,所以我不妨将它们全部放在一个文件中).

我们目前使用的是 Spring Boot 1.5.10。

关于如何实现我想要做的事情有什么想法吗?

最佳答案

我终于找到了解决方案(以防其他人发现自己在同一个地方)。

第 1 步:将这样的配置类添加到您的启动器:

package com.company.bootstrap;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Profile;

@Configuration
@Profile("nonprod")
public class BootstrapNonprod {
public BootstrapNonprod(ConfigurableApplicationContext ctx) {
ctx.getEnvironment().addActiveProfile("nonprodEncryption");
}
}

这将有条件地添加配置文件。在此示例中,只要“nonprod”配置文件处于事件状态,此类就会添加“nonprodEncryption”配置文件。

第 2 步:在启动器的 spring.factories 文件中,添加如下一行:

org.springframework.cloud.bootstrap.BootstrapConfiguration=com.company.bootstrap.BootstrapNonprod

好像就是这么简单。

关于spring - 通过 Spring Boot starter 包含配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729518/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com