如何绘制一张地图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
) {}
我认为为了简单起见,您可以使用以下命令创建一个文件:
@ConfigurationProperties(prefix = "foo")
public record Foo(Bar bar) {
public record Bar(Baz baz) {
public record Baz(String bum) {}
}
}
这在 spring-boot 中工作得很好,你不需要重复注释,使用它时你只需使用:
String bumVal = foo.bar().baz().bum();
其中 foo 只是注入到您需要的 Bean 中。
我什至删除了@ConsructorBinding
从 spring-boot 2.6 开始,只要记录只定义一个构造函数,就不再需要它了,请参阅发行说明 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.6-Release-Notes#records-and-configurationproperties.
上面的配置与您自己的答案结构有关,但这也是原始问题结构的紧凑方式:
@ConfigurationProperties(prefix = "foo")
public record Foo(Bar bar, Baz baz, String color) {
public record Bar(String something) {
}
public record Baz(String otherThing) {
}
}
我找到了record
type 对于这个用例非常有用,因为非常紧凑并且不需要编写太多代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)