需要帮助弄清楚如何在 Spring Boot Java 应用程序中从 yml 加载嵌套列表

2023-12-27

我有一个像这样的 yaml 文件设置:

system:
  locators:
  - first.com
    - 103
    - 105
  - second.com
    - 105

我想将其加载为@autowired配置看起来像这样:

@Autowired
List<Locator> locators;

我认为 Locator 类看起来像这样:

class Locator {
    String name;
    List<String> ports;
}

但我不知道如何将这一切放在一起。任何帮助表示赞赏!


首先,我相信您的 yaml 文件结构无效。在您的 Locator 类中,您已经为字段指定了名称 - 您应该在 yaml 文件中执行相同的操作。最后它应该看起来像这样:

system:
  locators:
  - name: first.com
    ports:
      - 103
      - 105
  - name: second.com
    ports:
      - 105

其次,您可以利用 Spring Boot 相当先进的属性到 bean 自动映射。与每个 Spring Boot 应用程序一样,您需要使用 @SpringBootApplication 注释您的主类。然后,您可以创建一个表示属性结构的类:

@Configuration
@ConfigurationProperties(prefix = "system")
public class SystemProperties {

    private List<Locator> locators;

    public List<Locator> getLocators() {
        return locators;
    }

    public void setLocators(List<Locator> locators) {
        this.locators = locators;
    }

    public static class Locator {
        private String name;
        private List<String> ports;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<String> getPorts() {
            return ports;
        }

        public void setPorts(List<String> ports) {
            this.ports = ports;
        }

    }

}

请注意 @ConfigurationProperties 注释,它定义了该类映射配置的根前缀。它当然可以是 yaml 属性树中的任何节点,不一定是您的情况中的主级别。

为了进一步阅读,我建议这个博客文章 https://spring.io/blog/2013/10/30/empowering-your-apps-with-spring-boot-s-property-support官方文档 http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html因为在属性 bean 映射方面有更强大的功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要帮助弄清楚如何在 Spring Boot Java 应用程序中从 yml 加载嵌套列表 的相关文章

随机推荐