java 在Sping Boot 中重写属性名称

dhxwm5r4  于 2023-02-14  发布在  Java
关注(0)|答案(2)|浏览(168)

我有一个库,其中包含@ConfigurationProperties(prefix ="b")@ConditionalOnProperty(prefix = "b", name= "c")的配置类,在我包含此配置类的项目中,属性“b”嵌套在名为“a”的属性下,而不是位于properties.yml的根级别,因此属性“b”的名称为“a.b”,配置类将被忽略,属性名需要在属性文件中保持“a.b”,有没有办法告诉spring Boot 忽略属性“b”的“a”前缀,或者在application.yml加载后将属性名从“a.b”重写为“b”?

but5z9lq

but5z9lq1#

你可以使用YAML锚和别名来满足这一需求(可能,取决于你所使用的配置类的确切上下文)。YAML锚点类似于HTML中的锚点(<a>标记);用锚标记yaml的某个部分,然后用其他地方的引用来引用它。引用是锚定值的别名。
在您的示例中,假设条件配置类如下所示:

@Configuration
@ConditionalOnProperty(prefix = "b", name = "foo")
@ConfigurationProperties(prefix ="b")
@Getter @Setter
public class SO_75435896 {

    private String foo;
}

您可以使用如下的YAML配置来填充它:

a.b: &b-alias
  foo: bar

b: *b-alias

锚名称(在我的示例中为b-alias)可以是您想要的任何名称,我选择的名称没有什么特别之处。
如果你想了解更多关于YAML锚点的信息,this is a decent explanation。它是Bitbucket文档的一部分,但是提供了一个很好的通用解释和例子。当然,还有很多关于YAML锚点的其他网页。

lsmepo6l

lsmepo6l2#

所以你的配置类和属性文件不能被修改。你可以在运行时在你的application.yml中重命名它:

B属性

@ConfigurationProperties(prefix ="b")
public class BProperties {
    private String c;
    private String d;
}

这个属性文件:
my-props-file.properties

a.b.c=value1
a.b.d=value2

您可以在运行时重命名application.yml中的属性(在src/main/ressources/下的类路径中定义):

应用程序.yml

b:
  c: ${a.b.c}
  d: ${a.b.d}

相关问题