我有一个 Spring Boot 应用程序,必须从 yaml 文件中读取属性。
代码:
@Component
@PropertySource("classpath:application.yml")
public class ResourceProvider {
@Autowire
private Environment env;
public String getValue(String key) {
return env.getProperty("app.max.size");
}
}
yaml 文件
app:
max:
size: 10
当我尝试这个时它不起作用。我将 app.max.size
的值设为空。对于 size
我得到的值为 10。
当我使用 application.properties 时。我能够得到想要的结果。我做错了什么吗?
应用程序属性
app.max.size=10
原文由 warrior107 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于您使用的是
application.yml
文件,因此您不需要手动将文件加载到上下文中,因为它是spring
应用程序的默认配置文件。您可以简单地在@Component
装饰类中使用它们,如下所示;如果您正在加载自定义
YAML
文件,那么这在 Spring 中仍然是一个大问题。使用@PropertySource
你不能简单地加载 YAML 文件。这是可能的,但需要做的工作很少。首先,您需要一个自定义属性源工厂。在您的情况下,自定义 YAML 属性源工厂。并且,您需要告诉
@PropertySource
注释使用此工厂而不是默认工厂,无论何时使用它,如下所示;您可以使用上面代码片段的
size
变量中显示的属性。尽管。如果您使用 YAML 数组声明来获取属性,即使您使用这种方式,这也有点奇怪。