Spring boot YAML Config未读取所有值
Posted
技术标签:
【中文标题】Spring boot YAML Config未读取所有值【英文标题】:Spring boot YAML Config not reading all values 【发布时间】:2017-06-28 00:12:12 【问题描述】:我正在尝试在我的 Spring Boot 1.5.1 项目中设置和使用 YAML 作为配置文件。
我的 YAML 文件如下所示:
hue:
user: cdKjsOQIRY8hqweAasdmx-WMsn
ip: "http://192.168.1.69"
scenes:
sunstatus:
enabled: true
id: 93yv8JekmAneCU9
group: 1
disable:
enabled: true
id: 93yv8JekmAneCU9
group: 6
阅读 hue.getUser() 非常好。但是,由于某种原因,hue.getScenes() 返回 null。我的 Hue Config 的 Java 代码如下所示:
@Configuration
@ConfigurationProperties(prefix = "hue")
public class Hue
private String user;
private String ip;
private Scenes scenes;
/*
* Getters and setters of course
*/
public class Scenes
private Sunstatus sunstatus;
private Disable disable;
/*
* Getters and setters
*/
public class Sunstatus
private boolean enabled;
private String id;
private String group;
/*
* Getters and setters
*/
public class Disable
private boolean enabled;
private String id;
private String group;
/*
* Getters and setters
*/
我也尝试用前缀注释每个类,格式为 hue.scenes.sunstatus、scenes.sunstatus 和 sunstatus。
此外,我还尝试使用 @Value 注释,但没有任何运气。
如果我将数据保存在 application.yml 或外部文件中,结果相同。总是只能到达 getUser()。
我在这里做错了什么?
【问题讨论】:
【参考方案1】:我看到您正在使用公共非内部类进行嵌套配置,因此您应该添加 @NestedConfigurationProperty
:
public class Scenes
@NestedConfigurationProperty
private Sunstatus sunstatus;
@NestedConfigurationProperty
private Disable disable;
Nested properties
您可以在字段上使用@NestedConfigurationProperty 注释来指示应将常规(非内部)类视为嵌套类。
所以要么添加注释(如果您打算在其他地方使用这些类)或将它们设为public static
。
【讨论】:
感谢您的提示,但切换到该提示后,我仍然遇到完全相同的问题。 您是否尝试过将类设为公共静态,例如引用状态,添加正确的 getter/setter? 是的,确保再试一次,但仍然为空。【参考方案2】:试试这个。
@Configuration
@ConfigurationProperties(prefix = "hue")
public class Hue
private String user;
private String ip;
private Scenes scenes = new Scenes();
/*
* Getters and setters of course
*/
public class Scenes
private Sunstatus sunstatus = new Sunstatus();
private Disable disable = new Disable();
/*
* Getters and setters
*/
public class Sunstatus
private boolean enabled;
private String id;
private String group;
/*
* Getters and setters
*/
public class Disable
private boolean enabled;
private String id;
private String group;
/*
* Getters and setters
*/
【讨论】:
场景现在通过这些更改初始化,但它仍然从示例返回 null:hue.getScenes().getSunstatus().getId() 这很奇怪。对我来说没问题。以上是关于Spring boot YAML Config未读取所有值的主要内容,如果未能解决你的问题,请参考以下文章
将 YAML 列表映射到 Spring Boot 中的对象列表
Spring Bootspring boot多环境配置及配置文件