【问题标题】:Apply Spring Profiles at run-time without restarting the application在运行时应用 Spring Profiles 而无需重新启动应用程序
【发布时间】:2025-10-02 17:40:01
【问题描述】:

我在我的 Spring Boot 应用程序中定义了多个配置文件,通常用于不同的场景。

在启动时,我指定要应用的配置文件并激活它们。

在运行时,我正在寻找一种无需重新启动应用即可激活配置文件的方法。

我知道 Spring cloud config 提供了一种外部化配置和重新加载的方法,使用执行器 /refresh 端点重新启动应用程序。

我将 Spring Cloud Config 为应用程序维护的外部化配置中的属性 spring.profiles.active=profileName 更改为不同的配置文件值,然后使用 /refresh 端点重新加载。但是,变化并没有得到体现。我使用了 Spring cloud config 的原生配置文件。

但是,我需要在应用启动后使用 Spring cloud Config/actuator 或其他机制更改配置文件或添加配置文件。

有没有办法满足我的要求。

【问题讨论】:

标签: spring-boot spring-cloud-config spring-profiles


【解决方案1】:

配置文件用于决定在启动时创建哪些 bean。因此,如果要在不同的配置文件集下运行,则必须重新启动。

你到底想达到什么目的?

如果你想在运行时选择 bean,那么编写一个类来注入你想从中挑选的所有可用 bean,然后通过一种基于你可以刷新的环境属性选择的方法来选择你想在运行时使用的那个通过 Spring Cloud Config/refresh 端点,或仅通过数据库列。

更新 - 要求是在运行时禁用缓存。这可以按如下方式完成:

编写一个方法来确定特定配置文件是否处于活动状态(环境是您注入的环境)

boolean isProfileActive(String profile) { 
   return Arrays.asList(environment.getActiveProfiles()).contains(profile);
}

然后将其用于可缓存注释上的拼写条件

【讨论】:

  • 感谢您的回复。我的要求是在服务方法中启用/禁用缓存。我目前将“@Cacheable”注释应用于我的每个服务方法,并且我使用带有“@EnableCaching”注释的自定义配置作为我在启动时激活的自定义配置文件。现在,我想在启动后启用/禁用缓存。
  • 嗯,好的,请参阅我的答案,了解基于活动配置文件在运行时禁用缓存。 *.com/questions/35917159/…我也会更新我的答案。
最近更新 更多