【发布时间】:2022-01-12 14:45:42
【问题描述】:
如何将具有嵌套属性的application.yaml 配置映射到Java 中类似的记录结构?
例如,如果我们有以下 yaml:
foo:
bar:
something: 42
baz:
otherThing: true
color: blue
所需的记录结构类似于:
@ConfigurationProperties(prefix = "foo")
@ConstructorBinding
public record Foo(
Bar bar,
Baz baz,
String color
) {}
// ---
@ConfigurationProperties(prefix = "foo.bar")
@ConstructorBinding
public record Bar(
int something
) {}
// ---
@ConfigurationProperties(prefix = "foo.baz")
@ConstructorBinding
public record Baz(
boolean otherThing
) {}
【问题讨论】:
-
乍一看它应该可以工作。您是否尝试过从记录
Baz和Bar中删除@ConfigurationProperties,因为它将被Foo中的属性名称拉取?或者,将记录Baz和Bar嵌套在Foo中,并从嵌套记录中删除@ConfigurationProperties(如果这是您可以接受的解决方案)。 -
事实证明确实如此,事实证明我没有正确地重建我的问题。我终于设法从它的工作原理中弄清楚出了什么问题,然后一步一步地潜水。如果我知道要问什么,将发布我打算问的问题的答案
-
关于
@ConfigurationProperties的删除只有在我不注入Bar和或Baz而没有Foo时才有效。我希望能够只注入我需要限制耦合和依赖关系的东西,所以我实际上不建议删除它们:)
标签: java spring spring-boot java-17 java-record