项目中SpringBoot配置文件未生效的原因分析与解决方法

 更新时间:2025年09月04日 08:35:32   作者:网罗开发  
在日常开发 Spring Boot 项目的时候,大家应该都遇到过这样一种情况:明明写了 application.yml,但是项目跑起来之后,配置好像完全没被加载,下面我们就来聊聊Spring Boot 配置文件未生效 的几个典型场景与解决方法吧

前言

在日常开发 Spring Boot 项目的时候,大家应该都遇到过这样一种情况:明明写了 application.yml,但是项目跑起来之后,配置好像完全没被加载。比如数据库连接还是旧的值,日志级别也没生效。这种情况其实挺常见,往往不是 Spring Boot 本身有问题,而是我们在配置文件路径、Profile 激活或者 IDE 启动参数上出了岔子。

这篇文章就来聊聊 Spring Boot 配置文件未生效 的几个典型场景,并配合 Demo 代码来演示如何解决。

配置文件路径问题

首先需要明确:Spring Boot 默认会从以下位置加载配置文件(优先级从高到低):

  • classpath:/application.yml
  • classpath:/config/application.yml
  • file:./application.yml
  • file:./config/application.yml

所以,如果你把 application.yml 放在了一个奇怪的位置(比如 resources/configs/),自然不会生效。

来看个例子:

# src/main/resources/application.yml
server:
  port: 8081

spring:
  application:
    name: demo-app

然后写一个最简单的 Spring Boot 应用:

@SpringBootApplication
@RestController
public class DemoApplication {

    @Value("${server.port}")
    private int port;

    @GetMapping("/hello")
    public String hello() {
        return "App is running on port: " + port;
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

如果 application.yml 正常被加载,启动后访问 http://localhost:8081/hello,会看到:

App is running on port: 8081

但如果你把 application.yml 放到 src/main/resources/configs/application.yml,那它就不会生效,Spring Boot 根本不会去那个目录找。

解决办法:要么挪到正确路径,要么用 --spring.config.location 指定路径:

java -jar demo.jar --spring.config.location=classpath:/configs/

Profile 没有正确激活

Spring Boot 支持多环境配置,比如:

# application.yml
spring:
  profiles:
    active: dev
# application-dev.yml
server:
  port: 8082

# application-prod.yml
server:
  port: 8083

如果你没激活 profile,那么默认只会加载 application.yml。有时候大家忘记在 application.yml 里写 spring.profiles.active,导致环境配置根本没切换。

另一种情况是你在 IDEA 里配置了 VM options,例如:

-Dspring.profiles.active=prod

那就会优先使用 application-prod.yml,而不是 application-dev.yml

小 Demo 验证

@Value("${server.port}")
private int port;

@GetMapping("/profile")
public String profile() {
    return "Running on port: " + port;
}

当激活 dev 时,返回 Running on port: 8082;当激活 prod 时,返回 Running on port: 8083

如果你明明写了 application-dev.yml 却发现不起作用,那大概率是 spring.profiles.active 没有正确指定。

IDEA 启动配置的问题

很多同学在用 IDEA 跑 Spring Boot 项目的时候,遇到配置不生效,其实是因为 IDEA 的 Run/Debug Configurations 里没传递参数。

比如你在命令行里用:

java -jar demo.jar --spring.profiles.active=dev

是没问题的。

但是在 IDEA 里如果你什么都不配,就可能跑成默认环境。正确做法是在 Run/Debug Configurations → VM options 里加上:

-Dspring.profiles.active=dev

这样无论是运行还是调试,都会加载对应的配置文件。

实际场景举例

举个比较真实的场景:

有个同事写了 application-dev.yml 配置了数据库连接:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo
    username: root
    password: root123

结果启动的时候报错:

Cannot load driver class: com.mysql.cj.jdbc.Driver

后来排查发现,原因有两个:

  • application-dev.yml 没生效,因为 spring.profiles.active 没指定;
  • Maven 依赖缺少 mysql-connector-java

改好之后就正常运行了。这个案例说明:配置文件问题往往不止一个,要结合日志一步步分析。

总结

Spring Boot 配置文件未生效主要有三个大坑:

  • 路径问题:放错位置,Spring Boot 根本找不到。
  • Profile 激活问题:没指定 spring.profiles.active,导致环境没切换。
  • IDEA 配置问题:运行参数没传递,结果和预期不一致。

我的建议是:

  • 路径一定放在标准目录;
  • 配置多环境时,一定检查 spring.profiles.active
  • 用 IDEA 启动时,确保 VM options 和命令行一致;
  • 另外,多看看启动日志,Spring Boot 在启动时会打印加载了哪些配置文件,非常直观。

到此这篇关于项目中SpringBoot配置文件未生效的原因分析与解决方法的文章就介绍到这了,更多相关SpringBoot配置文件未生效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • PostMan传@RequestParam修饰的数组方式

    PostMan传@RequestParam修饰的数组方式

    这篇文章主要介绍了PostMan传@RequestParam修饰的数组方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 详解java代码中init method和destroy method的三种使用方式

    详解java代码中init method和destroy method的三种使用方式

    这篇文章主要介绍了详解java代码中init method和destroy method的三种使用方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Intellij IDEA 中调试 maven 插件的步骤

    Intellij IDEA 中调试 maven 插件的步骤

    这篇文章主要介绍了Intellij IDEA 中调试 maven 插件,本文分步骤给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Java抽象类和抽象方法定义与用法实例详解

    Java抽象类和抽象方法定义与用法实例详解

    这篇文章主要介绍了Java抽象类和抽象方法定义与用法,结合实例形式详细分析了Java抽象类和抽象方法相关原理、定义、使用方法及操作注意事项,需要的朋友可以参考下
    2019-11-11
  • 关于Spring Boot项目的 log4j2 核弹漏洞问题(一行代码配置搞定)

    关于Spring Boot项目的 log4j2 核弹漏洞问题(一行代码配置搞定)

    相信昨天,很多小伙伴都因为Log4j2的史诗级漏洞忙翻了吧,不过我看到群里发出来的各种修复方法,还真是不好看...所以这里也提一下Spring Boot用户怎么修复最简单吧,对Spring Boot log4j2 核弹漏洞问题感兴趣的朋友参考下吧
    2021-12-12
  • 解决httpServletRequest.getParameter获取不到参数的问题

    解决httpServletRequest.getParameter获取不到参数的问题

    这篇文章主要介绍了解决httpServletRequest.getParameter获取不到参数的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • SpringBoot自动装配原理及分析

    SpringBoot自动装配原理及分析

    SpringBoot通过@SpringBootApplication注解启动自动装配,其中@EnableAutoConfiguration导入AutoConfigurationImportSelect类,读取META-INF下的配置文件,根据@Conditional条件筛选并注入符合条件的Bean到IOC容器
    2025-09-09
  • Spring boot如何快速的配置多个Redis数据源

    Spring boot如何快速的配置多个Redis数据源

    这篇文章主要介绍了Spring boot如何快速的配置多个Redis数据源,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • MybatisPlus字段自动填充失效,填充值为null的解决方案

    MybatisPlus字段自动填充失效,填充值为null的解决方案

    这篇文章主要介绍了MybatisPlus字段自动填充失效,填充值为null的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Java语言面向对象编程思想之类与对象实例详解

    Java语言面向对象编程思想之类与对象实例详解

    这篇文章主要介绍了Java语言面向对象编程思想之类与对象实例详解,还是十分不错的,这里给大家分享下,需要的朋友可以参考。
    2017-10-10

最新评论