我在 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 中。
这是我发现的:
- 如果我不为主类中的字段提供吸气剂,那么有时主调用中的字段保持为空,因此不会启动
- 如果我重新启动 SpringBoot,则随机其他(1 个或多个)字段保持为空,因此未启动
- 如果我重新启动 SpringBoot n 次,那么,随机字段一次又一次地保持为空
- 如果我为主类中的字段提供 getter ,那么无论我重新启动 SpringBoot 多少次,所有字段都将始终从 tye yml 文件中实例化
为什么是这样?为什么 SpringBoot 需要在 yml 中表示属性的字段的 getter?