ZiheYe 2024-02-27 10:19 采纳率: 66.7%
浏览 22
已结题

springboot怎么读取yml配置文件中多组相同的配置?

img

请问这种类型的配置怎么读取?目前来讲我用一个实体类来接收

img

但是里面的属性读取不到读取不到配置,debug的时候看到为空

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-02-27 10:20
    关注

    引自免费微信小程序:皆我百晓生

    在Spring Boot中,读取YAML配置文件中多组相同的配置时,通常会使用@ConfigurationProperties注解结合一个Java类来绑定这些配置。假设你有一个如下的YAML配置:

    servers:
      - name: server1
        url: http://server1.example.com
        port: 8080
      - name: server2
        url: http://server2.example.com
        port: 8081
    

    首先,创建一个Java类来映射这组配置:

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    @Component
    @ConfigurationProperties(prefix = "servers")
    public class ServerConfigList {
    
        private List<ServerConfig> list;
    
        public List<ServerConfig> getList() {
            return list;
        }
    
        public void setList(List<ServerConfig> list) {
            this.list = list;
        }
    
        public static class ServerConfig {
            private String name;
            private String url;
            private int port;
    
            // getters and setters for each field
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public String getUrl() {
                return url;
            }
    
            public void setUrl(String url) {
                this.url = url;
            }
    
            public int getPort() {
                return port;
            }
    
            public void setPort(int port) {
                this.port = port;
            }
        }
    }
    

    现在,Spring Boot会自动将YAML配置中的servers部分与ServerConfigList类进行绑定。你可以在需要的地方注入并使用这个类:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class SomeService {
    
        @Autowired
        private ServerConfigList serverConfigList;
    
        public void processServers() {
            for (ServerConfig server : serverConfigList.getList()) {
                System.out.println("Server Name: " + server.getName());
                System.out.println("Server URL: " + server.getUrl());
                System.out.println("Server Port: " + server.getPort());
            }
        }
    }
    

    这样,你就可以正确地从YAML配置文件中读取到多组相同类型的配置了。如果你发现调试时属性为空,请确保你的配置文件名称符合Spring Boot的默认规则(application.yml或application.yaml),并且该文件位于正确的资源路径下,并已被Spring Boot扫描加载。如果问题依旧存在,请检查项目依赖是否完整以及是否有其他可能影响配置加载的因素。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日