【发布时间】:2021-03-27 13:11:37
【问题描述】:
我在 SpringBoot 中发现了一个奇怪的行为。
在一个 yml 文件中,我有以下配置:
main:
record-id:
start-position: 1
value: 1
enabled: true
record-name:
start-position: 2
value: main
enabled: true
invented:
start-position: 3
value: 01012020
enabled: false
这些是它的类:
public class FieldType {
private Integer startPosition;
private String value;
private Boolean enabled;
getters/setters
}
@Component
@ConfigurationProperties(prefix = "main")
public class Main {
private FieldType recordId;
private FieldType recordName;
private FieldType invented;
getters/setters <-- sometimes without getters
}
如您所见,主类具有 @ConfigurationProperties 注释以将 yml 中的属性加载到该 bean 中。
这是我发现的:
- 如果我不为 main 类中的字段提供 getter,那么主调用中的字段有时会保持为空,因此不会启动
- 如果我重新启动 SpringBoot,那么随机其他(1 个或多个)字段保持为空,因此未启动
- 如果我重新启动 SpringBoot n 次,那么,一次又一次,随机字段保持为空
- 如果我为主类中的字段提供getter,那么无论我重启SpringBoot多少次,所有字段都将始终从tye yml文件中实例化
这是为什么?为什么 SpringBoot 需要在 yml 中表示属性的字段的 getter?
【问题讨论】:
标签: java spring-boot yaml instantiation configurationproperties