gpt4 book ai didi

spring-boot - Yaml 属性未在 spring boot 中加载

转载 作者:行者123 更新时间:2023-12-05 05:50:11 26 4
gpt4 key购买 nike

我想使用 application.yml 而不是 application.properties

我关注了:https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/html/boot-features-external-config.html

我正在使用:

  • SpringBoot 2.6.2
  • Java 17
  • Gradle 7.3.2

我的 MCVE: https://github.com/OldEngineer1911/demo1

问题是:未加载属性。有人可以帮忙吗?

最佳答案

你有以下代码

@SpringBootApplication
public class Demo1Application {

public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
Products products = new Products(); <---------------------------------ERROR!!!
List<String> productsFromApplicationYml = products.getProducts();

System.out.println(productsFromApplicationYml.size()); // I would like to see 2
products.getProducts().forEach(System.out::println); // I would like to see "first" and "second"
}



@Component
@ConfigurationProperties(prefix="products")
public class Products {
private final List<String> products = new ArrayList<>();

public List<String> getProducts() {
return products;
}
}

错误在行 Products products = new Products();你的主要方法。您不需要从 Spring 上下文中检索 bean,而是您自己在 JVM 中创建它。因此,它就像您创建它时一样是空的。

阅读更多内容以了解 Spring 如何为您的 spring bean 使用代理,而不是您编写的实际类。

你需要的是以下内容

public static void main(String[] args) {
ApplicationContext app = SpringApplication.run(Demo1Application.class, args)

Products products = app.getBean(Products.class); <---Retrieve the Proxy instance from Spring Context

List<String> productsFromApplicationYml = products.getProducts();
System.out.println(productsFromApplicationYml.size())

编辑:

您还错误地配置了您的 application.yml文件。

products:
- first
- second

符号-用于 spring 将尝试从 application.yml 序列化的复杂对象数组.检查我在 this SO thread 中的意思

考虑到您没有自定义对象的列表,而是原始的 List<String>你的application.yml应该是下面的形式

products: first,second

关于spring-boot - Yaml 属性未在 spring boot 中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70552038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com