首页 文章

Spring Boot:从YAML文件加载@Value

提问于
浏览
20

我需要从 .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 Environment:当前目录的A / config子目录 . 当前目录A classpath / config包类路径根目录

以及:

您还可以使用YAML(' . mil')文件替代'.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 .

2 回答

  • 3

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

  • 1

    对我来说,属性文件中的重复键导致了这个......

    我在大yml文件中不知不觉地使用了相同的密钥 .

    key:   
     key1: value
     key2: value
    
    key:  
     key3: value
    

相关问题