Spring启动YAML配置不读取所有值

时间:2017-02-09 20:09:38

标签: java spring spring-boot configuration yaml

我尝试在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()。

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

我发现您使用公共非内部类进行嵌套配置,因此您应该添加@NestedConfigurationProperty代替:

public class Scenes {

    @NestedConfigurationProperty
    private Sunstatus sunstatus;

    @NestedConfigurationProperty
    private Disable disable;
  

Nested properties

     

您可以在字段上使用@NestedConfigurationProperty注释来指示应将常规(非内部)类视为嵌套。

因此,要么添加注释(如果您打算在其他地方使用这些类),请将它们设为public static

答案 1 :(得分:0)

试试这个。

@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
             */
        }
    }
}