无法从 Spring 启动应用程序中的 yaml 读取复杂属性



无法从Spring Boot应用程序中读取YAML的复杂属性。这是不同的作品

yaml文件

spring:
   profiles: dev
   test: BLAHSSD
   serversList: 
    - host: localhost
      port: 27017
      db: myDB
      username: xxx
      password: yyy

Java类

server.java

public class Server {
    String host;
    int port;
    String db;
    String username;
    String password;
    public Server() {
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
    public String getDb() {
        return db;
    }
    public void setDb(String db) {
        this.db = db;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "Server [host=" + host + ", port=" + port + ", db=" + db + ", username=" + username + ", password="
                + password + "]";
    }
}

配置读取器

@Component
@Configuration
@PropertySource("file:/tmp/test.yaml")
@ConfigurationProperties()
public class TestDBConfiguration {
    private String test;
    private List<Server> serversList;
    public List<Server> getServersList() {
        return serversList;
    }
    public void setServersList(List<Server> serversList) {
        this.serversList = serversList;
    }
    public String getTest() {
        return test;
    }
    public void setTest(String test) {
        this.test = test;
    }
}

当我评论serverslist属性时,我能够读取"测试"属性。但是,请继续获得此例外服务器列表:

原因:无法将'java.lang.string类型的属性值转换为 所需的类型'java.util.list'用于属性'serverslist'

我相信您的YAML结构无效。尝试将其更改为:

spring:
   profiles: dev
   test: BLAHSSD
   serversList: 
    - server:
        host: localhost
        port: 27017
        db: myDB
        username: xxx
        password: yyy

来自文档:

24.6.4 yaml缺点

yaml文件不能通过@PropertySource注释加载。所以 您需要以这种方式加载值的情况,您需要使用 属性文件。

此外,Java在编译时删除了通用信息。因此,在运行时春季将serverList的类型视为List,而不是List<Server>,并且无法将您的配置属性转换为Server对象列表。

最新更新