我想使用应用程序.yml 而不是应用程序属性
我跟着: https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/html/boot-features-external-config.html
我正在使用:
我的https://github.com/OldEngineer1911/demo1 MCVE
问题是:属性未加载。有人能帮忙吗?
“@Panagiotis布吉奥科斯”的解决方案部分正确:
Products products = app.getBean(Products.class); <---Retrieve the Proxy instance from Spring Context
是必需的,但其余的都是可选的(可以用两种方式在yml中编写列表)。解决方案是使用嵌套产品修复 yml 文件:
products:
products:
- 'first'
- 'second'
还为产品添加了setter:
@Component
@ConfigurationProperties(prefix="products")
public class Products {
private List<String> products;
public List<String> getProducts() {
return products;
}
public void setProducts(List<String> products) {
this.products = products;
}
}
这是一个有效的解决方案(每个人都可以检查问题中提到的Github)。无论如何,它仍然可以改进 - 不知道为什么我需要嵌套产品。
您有以下代码
@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;
}
}
错误在您的main方法的Products=new Products();
行中。您不从Spring上下文中检索bean,而是在JVM中自己创建它。因此,它就像您创建它一样是空的。
阅读更多内容,了解Spring如何使用spring beans的代理,而不是您编写的实际类。
您需要的是以下内容
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将尝试从应用程序.yml
序列化。检查我在这个SO线程中的含义
考虑到您没有一个定制对象的列表,而是一个基本的< code >列表
products: first,second
我使用自动配置(仅通过注释)运行Spring启动和kafka,并在.yaml文件中定义了道具,即: 它工作得很好,spring maps即字段group-id正确。 但是当我尝试使用相同的yaml文件手动配置Kafka(使用消费者工厂和消费者配置)时,我遇到了问题。在类中,消费者配置Kafka属性以 命名。在名称中,而不是 _ 即: 所以我不能把它们加载到map中,然后把map传递给Consume
我在Java spring-boot应用程序的src/main/resources中定义了以下application-errors.yml文件: 请注意,我尝试了两种不同的格式来指定属性。 我通过@Configuration注释类中的以下Bean加载该属性文件: 我看到属性是通过Spring环境变量加载的,但不是我所期望的模式。调试时,我可以看到加载的属性文件的源包含以下值: 看起来 yaml 文
我有一个Spring Boot应用程序,它有一些配置属性。我正在尝试为一些组件编写测试,并希望从< code>test.properties文件中加载配置属性。我不能让它工作。 这是我的代码: 文件(在src/test/resources下): 配置属性类: 我的测试: 测试失败,并显示“预期实际不为空”,这意味着未设置配置属性类中的属性。
我有一个Spring Boot应用程序如下: 我正在使用spring配置文件,并根据活动配置文件加载一个正确的特定环境文件:utils-local.properties、utils-dev.properties等。 当通过application.properties(spring)设置配置文件时,例如spring.profiles.active=local all工作良好,将加载正确的文件(uti
我已经在stackoverflow和网络上寻找解决方案。我没有见过有效的解决方案,因为可能没有一个帖子完全符合我的用例,它包含文件中的列表和对象结构。 这里有一个例子作为yaml 这是与属性文件相同的示例 我希望能够向我的应用程序提供 teddy.yml 或 teddy.properties 文件以进行配置。 这是我的课程: 我已经尝试了这种设置,使用环境来尝试访问属性,删除前缀,声明一个“Pro