Spring Boot:从 YAML 文件加载 @Value

新手上路,请多包涵

我需要从 .yml 文件加载一个属性,该文件包含应用程序可以从中读取文件的文件夹的路径。

我正在使用以下代码注入属性:

 @Value("${files.upload.baseDir}")
private String pathToFileFolder;

用于开发的 .yml 文件位于 src/main/resources/config/application.yml 下,我在生产中使用以下命令运行应用程序,以覆盖开发设置:

 java -jar app.jar --spring.config.location=/path/to/application-production.yml

Spring Boot 文档说:

SpringApplication 将从以下位置的 application.properties 文件中加载属性并将它们添加到 Spring 环境中:

  1. 当前目录的 /config 子目录。

  2. 当前目录

  3. 一个类路径 /config 包

  4. 类路径根

也:

您还可以使用 YAML (‘.yml’) 文件作为 ‘.properties’ 的替代品。

.yml 文件包含:

 {...}
files:
      upload:
        baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}

我的 Application 类注释为:

 @SpringBootApplication
@EnableCaching

当我运行应用程序时,我得到一个异常:

 Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"

我是否必须使用 YamlPropertySourceLoader 类或添加特殊注释才能在 Spring Boot 中启用对 .yml 的支持?

编辑: .yml 文件包含一些其他属性,这些属性由 Spring Boot 成功加载,例如 dataSource.XXXhibernate.XXX

原文由 Thomas Schmidt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

M. Deinum 是对的,我提供的设置正在运行 - yml 文件缩进错误,因此找不到该属性。

原文由 Thomas Schmidt 发布,翻译遵循 CC BY-SA 3.0 许可协议

例如:application.yml

 key:
 name: description here

你的班:

 @Value("${key.name}")
private String abc;

原文由 Nick Borges 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题