SpringBoot配置文件的加载顺序

这篇具有很好参考价值的文章主要介绍了SpringBoot配置文件的加载顺序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、引言

如果我们了解SpringBoot配置文件的加载顺序,对项目的开发和部署会有很大的帮助。举个工作中的例子,我们的项目是微服务架构模式,用Nacos做注册中心(可以配置每个微服务),所有服务请求需要通过网关,由网关做统一的鉴权和路由转发。环境有三套,本地环境、测试环境、网络环境。

每套环境都有自己的Nacos配置和数据库配置,难道我们每次打包到不同环境都有修改完配置文件再打包?开发的时候再一个一个改回来?答案当然是:No。

So,了解SpringBoot配置文件的加载顺序还是很有必要的。

二、SpringBoot配置文件的加载顺序

1、项目内配置文件加载顺序

SpringBoot配置文件的加载顺序

SpringBoot项目启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件,具体的目录位置见下图。

file:./config/ ( 项目根路径下的config文件夹)
file:./ (项目根路径)
classpath:/config/ (类路径下的config文件夹)
classpath:/ (类路径)

SpringBoot配置文件的加载顺序

四个位置的配置文件中端口分别配置为:8081、8082、8083、8084。并启动程序,发现8081端口起作用。

SpringBoot配置文件的加载顺序

从上面的位置,逐一注释掉配置文件中的配置项,启动项目,会发现配置文件逐一会起作用。下面是注释掉8081的配置,启动项目后,发现8082会起作用。可以逐一注释验证。

SpringBoot配置文件的加载顺序

上面四个位置的配置文件位置,优先级由高到底,高优先级的配置会覆盖低优先级的配置,没有的配置进行互补配置。

注意:不是类路径下的配置文件在打包时,如果不做配置是不会打包进jar中的,也会是说前两个配置在项目打包后,包中是不存在的,所以尽量不要用前两个位置。

2、外部配置文件

当我们把项目打包后,如何在配置SpringBoot项目呢?

(1)、命令行参数

项目打包好以后,我们可以使用命令行参数的形式,来改变想改变的几个参数,直接在启动命令后添加启动参数,如果有多个配置项,可以用空格分开。

SpringBoot配置文件的加载顺序

(2)、spring.config.location

在第一种情况下,如果参数数量过多,我们就要考虑配置文件了,我们在启动项目的时候可以用spring.config.location来指定配置文件的新位置。指定的配置文件和jar包中默认加载的配置文件共同起作用形成互补配置。

指定配置文件从F盘下读取

java -jar springboot-configuration.jar --spring.config.location=F:/application.properties

3、配置文件加载顺序小结

外部配置加载顺序SpringBoot也可以从以下位置加载配置:

优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 。

  1. 命令行参数。所有的配置都可以在命令行上进行指定;

  2. 来自java:comp/env的JNDI属性;

  3. Java系统属性(System.getProperties());

  4. 操作系统环境变量 ;

  5. jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件

  6. jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件 再来加载不带profile

  7. jar包外部的application.properties或application.yml(不带spring.profile)配置文件

  8. jar包内部的application.properties或application.yml(不带spring.profile)配置文件

  9. @Configuration注解类上的@PropertySource

根据第7条,我们只要在jar包同目录外放置一个application.properties配置文件,就会起作用,同时这个配置文件的优先级还比jar内的高,这个配置很有作用!!

具体可以参看官方文档:

  • https://docs.spring.io/spring-boot/docs/2.1.11.RELEASE/reference/html/boot-features-external-config.html文章来源地址https://www.toymoban.com/news/detail-433174.html

到了这里,关于SpringBoot配置文件的加载顺序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot及Nacos配置中心加载顺序及覆盖生效关系

    目录 一、测试环境版本 二、测试结果 1、标准的SpringBoot应用 2、含有Nacos配置中心的SpringBoot应用 spring-boot-starter-parent  2.7.10 spring-cloud-starter-bootstrap  3.1.6 spring-cloud-starter-alibaba-nacos-config  2021.0.4.0 nacos-client 2.1.1 nacos服务端 2.2.1 1、标准的SpringBoot应用 在标准的SpringBoot应用中,

    2024年02月08日
    浏览(39)
  • Spring Boot 的系统配置文件加载顺序

    【理论介绍】 配置文件加载顺序: 1、项目根目录下的config目录。【优先级最高】 2、项目根目录。 3、classpath下的config目录。 4、classpath目录(新建项目时application.properties默认所在位置)。【优先级最低】 备注: 加载顺序:4 - 3 - 2 - 1。 优先级:逐渐减低(1234)。 【举例说

    2024年02月09日
    浏览(54)
  • SpringCloud + Nacos配置文件加载顺序和优先级详解

    在微服务架构中,合理地管理和理解配置文件的加载顺序与优先级对于确保应用的稳定性和灵活性至关重要。特别是在使用 Spring Cloud Alibaba Nacos 作为配置中心的场景下,这一点显得尤为重要。本文将基于一个具体的 bootstrap.yml 配置示例,深入探讨这些概念,并介绍如何通过

    2024年03月27日
    浏览(50)
  • springboot使用配置文件配置我们自己配置类的值

    springboot实现一个配置类,该类的属性通过配置文件配置,而不是写死在代码里面。 新建我们需要的配置类,定义好属性名称,然后标记 @ConfigurationProperties(prefix = “sky.jwt”) 注解,里面的值是我们自己定义的前缀,在配置文件需要使用到,用来配置我们属性的值,最后我们在

    2024年01月21日
    浏览(43)
  • vue:如果.vue文件内容过多,我们可以这样拆分

    一、标签内容太多,我们可以用组件的方式拆分 二、那如果JS的内容太多呢?因为耦合性太高,拆成组件后父子组件传值不方便,我们可以这样: 子组件: 父组件(也就是vue主页面): 逻辑拆分,相互调用不受组件影响  

    2024年02月02日
    浏览(48)
  • 聊聊Spring Boot配置文件:优先级顺序、加载顺序、bootstrap.yml与application.yml区别详解

    在 Spring Boot 中,配置文件的优先级顺序是: application-{profile}.yml ( application-{profile}.properties ) application.yml ( application.properties ) bootstrap.yml ( bootstrap.properties )。其中, {profile} 表示不同的环境配置,如 dev 、 test 、 prod 等。 优先级从高到低,高优先级的配置覆盖低优先级

    2024年01月25日
    浏览(60)
  • SpringBoot 配置文件加载优先级

    最近在使用k8s部署项目的时候,发现Dockerfile文件中的命令后面跟的参数,无法覆盖nacos中的参数,今天有时间正好来整理一下Springboot配置的加载顺序 整理加载顺序第一个肯定看官方文档:https://docs.spring.io/spring-boot/docs/2.2.9.RELEASE/reference/htmlsingle/#boot-features-external-config 看不懂我们直

    2024年02月02日
    浏览(42)
  • SpringBoot 启动配置文件加载和参数配置修改问题

    SpringBoot 或者SpringCloud 有配置文件加载和参数修改的机制,本文将从两个角度阐述参数修改和配置文件启动覆盖问题。 以下几种方式都可以被@Value读取到 java -jar -Dserver.port=8080 -Xms1024m demo.jar java -jar demo.jar --server.port=8080 从操作系统的环境变量中读取 通过项目中配置文件boots

    2023年04月15日
    浏览(48)
  • SpringBoot项目加载配置文件的6种方式

    目录 1、通过@value注入 2、通过@ConfigurationProperties注入 3、通过框架自带对象Environment实现属性动态注入 4、通过@PropertySource注解实现外部配置文件注入属性值 5、yml 外部配置文件动态注入 6、Java原生态方式注入属性值 满足条件: 1、该类首先要被SpringBoot框架管理,属于SpringB

    2024年02月11日
    浏览(32)
  • SpringBoot源码分析(4)--Environment(下)/配置文件加载原理

    SpringBoot源码分析 SpringBoot源码分析(1)–@SpringBootApplication注解使用和原理/SpringBoot的自动配置原理详解 SpringBoot源码分析(2)–SpringBoot启动源码(万字图文源码debug讲解springboot启动原理) SpringBoot源码分析(3)–Environment简介/prepareEnvironment准备环境(万字图文源码debug分析) 上一篇《

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包