springboot读取application.yml报错问题及解决

  • Post category:http

下面是详细讲解“springboot读取application.yml报错问题及解决”的完整攻略。

问题描述

在使用Spring Boot项目时,我们有时候会遇到无法读取 application.yml 配置文件的问题,出现类似如下错误信息:

Could not resolve placeholder 'xxx' in value "${xxx}"

这是因为程序在初始化时找不到正确的配置文件导致无法读取其中的配置。

解决方案

解决该问题的方法有两种:

1. 指定配置文件路径

SpringApplication.run() 方法中指定 application.yml 配置文件的路径,例如:

@Configuration
@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApp.class);
        app.setBannerMode(Banner.Mode.OFF);
        app.run("--spring.config.location=file:/path/to/application.yml");
    }
}

上述代码中,MyApp 为启动类,--spring.config.location 指定了配置文件的绝对路径。

2. 添加配置文件路径到 classpath 中

application.yml 配置文件放到 /src/main/resources 路径下即可。这是 Spring Boot 默认读取配置文件的路径,也是最简单的方式。如果你想自定义配置文件名,也可以在 @SpringBootApplication 注解中指定,例如:

@Configuration
@SpringBootApplication(
    scanBasePackages = "com.xxx",
    properties = {
        "spring.config.name=custom",
        "spring.config.location=classpath:/config/application.yml"
    }
)
public class MyApp {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApp.class);
        app.setBannerMode(Banner.Mode.OFF);
        app.run(args);
    }
}

上述代码中,spring.config.name 指定了自定义的配置文件名为 custom,而 spring.config.location 则指定了配置文件的相对路径为 /config/application.yml

示例说明

示例一:指定配置文件路径

MyApp 启动类的 main 方法中,手动指定了 application.yml 文件的路径如下:

(...)
app.run("--spring.config.location=file:/path/to/application.yml");

示例二:添加配置文件路径到 classpath 中

application.yml 配置文件放到 /src/main/resources 路径下即可,无需其他额外配置。