Springboot的配置文件及其优先级说明

 更新时间:2025年12月11日 14:33:36   作者:我是鸹貔  
文章介绍了Spring Boot的配置文件,包括application.properties和application.yml的使用,以及它们的优先级,还讨论了如何通过外置配置文件覆盖内置配置文件,并使用@Value注解读取自定义属性

配置文件

内置配置文件

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;SpringBoot使用一个全局的配置文件,配置文件名是固定的:

  • application.properties
  • application.yml

以上两个任意一个都可以,也可以组合起来使用

  • 以前的配置文件:大多都使用的是 xxxx.xml文件;
  • YAML:以数据为中心,比json、xml等更适合做配置文件;

yml与properties的比较

application.properties与application.yml的比较:

我们会发现properties文件如果是要配置同一层级下的属性需要把它的前缀全部写上,而yml文件则是跟文件的层级结构相似,而且分层清晰,所有我们一般选择使用yml文件。

优先级比较

虽然说application.yml与application.properties都是springboot的配置文件,但是他们也存在一个优先级:properties的优先级高于yml文件。

接下来就是验证这个优先级 :

首先给yml和properties文件设置不同的port,然后启动项目

项目启动之后,我们从日志中可以看到端口号时8081,时properties文件中配置的,因此验证了properties文件的优先级。

外置配置文件

首先,再我们的项目中我们导入了一个插件,可以将应用打包成一个可执行的jar包,无论在哪都可以使用java -jar进行运行。因此我们可以把打包好的jar包拿出来,放到一个文件夹中,然后去验证其外置的配置文件。

插件如下:

打包的时候我们先需要依次运行clean和package指令。

打包完成之后我们可以进入到项目对应的target文件夹下边,结构如下:

我们可以把jar包复制一份,然后放到一个新的文件夹中,并在文件夹中新建一个application.yml文件,重新制定port为8085,然后使用java -jar运行程序。

java -jar redisdemo-0.0.1-SNAPSHOT.jar

然后我们在当前目录下新建一个config文件,config文件中新建一个application.yml文件,并设置port为8090,然后再次启动项目,我们会发现端口号变成了8090。

因此我们得到一个优先级的比较:

外置的config中的配置文件>外置的配置文件>内置的application.properties>内置application.yml

springboot读取配置文件

我们也可以在配置文件中自定义属性的值,然后可以使用@Value来读取,例如:

在yml文件中添加:

api:
  name: zhangsan
  password: 123456

新建ConfigController文件:

package com.example.redisdemo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigController {
    // :后边的是默认值,如果找不到api.name就使用1,并且不会抛出异常
    @Value("${api.name:1}")
    private String name;
    @Value("${api.password:2}")
    private String password;

    @GetMapping("/config")
    public void config(){
        System.out.println(name);
        System.out.println(password);
    }
}

然后启动项目,访问config进行验证:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis-Plus 逻辑删除的实现示例

    MyBatis-Plus 逻辑删除的实现示例

    逻辑删除通过标记字段实现数据“假删除”,既保障了数据安全,又简化了恢复操作,是核心业务数据的最佳删除方案,下面就来介绍一下MyBatis-Plus逻辑删除的实现,感兴趣的可以了解一下
    2026-01-01
  • JVM完全解读之GC日志记录分析

    JVM完全解读之GC日志记录分析

    这篇文章主要介绍了JVM完全解读之GC日志记录分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-01-01
  • SpringBoot项目中application.yml和bootstrap.yml文件的区别及说明

    SpringBoot项目中application.yml和bootstrap.yml文件的区别及说明

    `application.yml`和`bootstrap.yml`都是Spring Boot项目中的配置文件,但它们在加载时机、用途、优先级、配置来源、适用场景和是否必须存在等方面存在区别
    2025-03-03
  • SpringBoot项目多模块项目中父类与子类pom.xml的关联问题小结

    SpringBoot项目多模块项目中父类与子类pom.xml的关联问题小结

    这篇文章主要介绍了SpringBoot项目多模块项目中父类与子类pom.xml的关联问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-04-04
  • Mybatis Plus使用@TableId的示例详解

    Mybatis Plus使用@TableId的示例详解

    在 MyBatis Plus 中,@TableId 注解是用于标记实体类中的主键字段,它可以更方便地处理主键相关的操作,如自动填充主键值或识别主键字段,这篇文章主要介绍了Mybatis Plus使用@TableId,需要的朋友可以参考下
    2024-08-08
  • Maven项目执行生命周期相关操作时出现错误:does not match a valid id pattern问题

    Maven项目执行生命周期相关操作时出现错误:does not match a 

    当pom文件中的gav标签格式错误,如出现中文或空格,会导致与有效的id模式不匹配错误,gav标签应仅包含数字、字母和下划线,解决方法是修改标签中的中文为英文,删除多余空格,并刷新pom文件,例如,将中文"测试"改为英文"test"
    2024-09-09
  • 如何利用@PreAuthorize注解自定义权限校验

    如何利用@PreAuthorize注解自定义权限校验

    通过使用@PreAuthorize注解实现开放接口的权限校验,具体步骤包括开启全局方法安全、编写自定义鉴权方法、创建自定义异常类、在统一异常处理类中捕获异常并处理,最后在需要鉴权的接口上贴上注解
    2024-12-12
  • IntelliJ IDEA新版本中Maven子模块不显示的解决方案

    IntelliJ IDEA新版本中Maven子模块不显示的解决方案

    在使用IntelliJ IDEA 2024版本开发Maven多模块项目时,我发现一个令人困惑的现象,父模块的子模块未在右侧 Maven 工具窗口中显示,仅显示父模块名称,而此前2021版本中,父模块和子模块均能正常显示,所以本文给大家介绍了IntelliJ IDEA新版本中Maven子模块不显示的解决方案
    2025-05-05
  • SpringAI+Ollama本地模型实现快速对话的实战指南

    SpringAI+Ollama本地模型实现快速对话的实战指南

    SpringAI是Spring官方推出的AI应用开发框架,旨在统一封装多种大模型,提供一套代码无缝切换不同模型的功能,下面我们就来看看SpringAI如何结合Ollama实现快速对话功能吧
    2026-05-05
  • Idea中Java项目如何修改项目名

    Idea中Java项目如何修改项目名

    这篇文章主要介绍了Idea中Java项目如何修改项目名问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论