在运行时应用Spring Profiles而不重新启动应用程序

时间:2017-06-28 09:27:12

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

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

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

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

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

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

但是,我需要在使用Spring云配置/执行器或其他一些机制启动应用程序后更改配置文件或添加配置文件。

有没有办法完成我的要求。

1 个答案:

答案 0 :(得分:0)

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

你到底想要实现什么目标?

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

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

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

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

然后在可缓存注释上使用它作为你的spel条件