弹簧启动:从 YAML 文件加载@Value

2022-09-01 01:08:37

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

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

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

用于开发的文件位于 下,im 在生产环境中使用以下命令运行应用程序,以覆盖开发设置:.ymlsrc/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. 类路径 /配置包

  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}"

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

编辑:该文件包含一些其他属性,这些属性由Spring Boot成功加载,如 或 。.ymldataSource.XXXhibernate.XXX


答案 1

例如:application.yml

key:
 name: description here

您的班级:

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

答案 2

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


推荐