在SpringBoot应用程序中,如何动态设置@ConfigurationProperties(prefix = ...)?

时间:2018-11-08 05:47:13

标签: spring-boot

我编写了一个小型应用程序,其中包含一个@ConfigurationProperties(prefix = ...)批注,以为其中一个bean加载正确的配置。一切正常,在针对不同环境进行测试时,我一直根据需要在IDE中手动更改prefix值。

现在,我需要清理它并确保应用程序可以在不同的环境中运行而无需重新编译。该值需要参数化。如何在运行时动态设置前缀?

相关问题

另一个问题使用spEL引用了一种无效的特定方法:

  

Property in @ConfigurationProperties prefix

这个人说你不能使用它YAML(我不在乎)

  

How to implement dynamic @ConfigurationProperties Prefix

我通常会寻找任何可行的解决方案。

1 个答案:

答案 0 :(得分:1)

我认为您要提出的要求与spring / spring boot的实践相矛盾。

配置属性键在弹簧中必须是静态的。

这意味着,在所有环境中,必须存在相同的配置属性键。

根据环境的不同,该属性的值是什么

对于本地开发,您可能需要解决:

示例:

my.db.host = localhost

但是对于生产而言,您将需要以下内容:

my.db.host = myproduction.db.host.real.address.goes.here

从Spring的角度来看,您有:

@ConfigurationProperties(prefix="my.db") 
class MyDbProperties {
   String host;
   ...
}

现在的问题是如何更改dev / stage / local / production等值的属性集。

春天的答案是“概况”

在春季启动中,您可以使用以下命令启动应用程序:

--spring.profiles.active=dev

在这种情况下,application-dev.properties将自动加载(或自动转换为Yaml)

因此,您应该为每个环境创建一个文件,并在其中放置特定值:

application-local.properties

my.db.host=localhost

application-prod.properties

my.db.host=myproduction.db.host.real.address.goes.here