无法从application.yml加载属性未绑定 [英] Failed to load properties from application.yml were left unbound

查看:1018
本文介绍了无法从application.yml加载属性未绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将服务器属性从application.yml加载到Configuration类. 我已经看到很多人已经问过同样的问题,但是没有一个对我有用:( 请帮我弄清楚我想念的东西

I want to load server properties from application.yml to Configuration class . I have seen that many have already asked same question, but none worked for me :( Please help me to figure what i am missing

@Configuration
  @ConfigurationProperties("demo")
  public class Democonfig {
    private List<Archive> archive = new ArrayList<>();
    public Democonfig(List<Archive> archive) {
        this.archive = archive;
    }
    // Getter and setter
   public static class Archive {
        private String host;
        private String database;
        private String port;

        public Archive(String host, String database, String port) {
            this.host = host;
            this.database = database;
            this.port = port;
        }
           // Getters and setters
   }
}


application.yml
demo:
  archive:
  -
    host: "localhost"
    database: "archive1"
    port: "27017"
  -
    host: "localhost"
    database: "archive2"
    port: "27017" 

显示异常

Binding to target [Bindable@129425f type = java.util.List<com.example.demo.config.Democonfig$Archive>, value = 'provided', annotations = array<Annotation>[[empty]]] failed:

    Property: demo.archive[0].database
    Value: archive1
    Origin: class path resource [application.yml]:5:15
    Reason: The elements [demo.archive[0].database,demo.archive[0].host,demo.archive[0].port,demo.archive[1].database,demo.archive[1].host,demo.archive[1].port] were left unbound.
    Property: demo.archive[0].host
    Value: localhost
    Origin: class path resource [application.yml]:4:11
    Reason: The elements [demo.archive[0].database,demo.archive[0].host,demo.archive[0].port,demo.archive[1].database,demo.archive[1].host,demo.archive[1].port] were left unbound.
    Property: demo.archive[0].port
    Value: 27017

点击此处! 完整的源代码和在git中上传的项目

Click here! for full source code and project uploaded in git

推荐答案

您在嵌套静态类中缺少No arg构造函数,实际上无需为构造函数提供参数.只有setter和getter可以了我也鼓励您签出并使用lombok,这将使您的代码简洁明了

You are missing the No arg constructor in nested static class, and actually no need to provide constructor with argument.Only setters and getters are fineI would also encourage u to check out and use lombok, it would make your code quire concise

public static class Archive {
    private String host;
    private String database;
    private String port;

    public Archive() {
        // TODO Auto-generated constructor stub
    }

    public Archive(String host, String database, String port) {
        System.out.println("constri=uu Archive");
        this.host = host;
        this.database = database;
        this.port = port;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public String getDatabase() {
        return database;
    }
    public void setDatabase(String database) {
        this.database = database;
    }
    public String getPort() {
        return port;
    }
    public void setPort(String port) {
        this.port = port;
    }
    @Override
    public String toString() {
        return "Archive [host=" + host + ", database=" + database + ", port=" + port + "]";
    }

}

这篇关于无法从application.yml加载属性未绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆