Spring Boot 之 内部/外部配置文件加载、优先级问题


        application.properties/yml 作为 Spring Boot 项目的全局配置文件。Spring Boot 也为我们提供了 profile 多环境支持,我们可以通过 application-{profile}.properties/yml的方式来解决多环境来回切换的问题。目前我们已知的就是这些配置文件都是需要在指定的位置下: classpath:/ 才能够生效(即:resources 资源目录下)。 接下来我们再来介绍一下 Spring Boot 项目在启动时,还可以加载哪些位置的配置文件。

1.全局配置文件放在项目如下路径,也是可以被 Spring Boot 加载到的

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

       这几个路径下的配置文件,都是可以被 Spring Boot 加载到的。它们之间的优先级由高到低,相同配置(比如:server.port=xxx),高优先级的会覆盖低优先级;不同配置的话,它们之间是互补的。四个路径在项目中的具体位置如下图所示:注意:名称必须为 application.yml/.properties,否则加载不到
在这里插入图片描述
        上图中,优先级由高到低,我们分别设置启动端口为:8084、8083、8082、8081。那么项目便会在 8084 端口启动完成。 【高优先级覆盖低优先级】

        此时,我们只在最低优先级配置一个 server.context-path=test (应用的上下文路径,也可以称为项目路径,是构成 url 地址的一部分)。项目启动后,由于高优先级未配置该属性,所以该配置属于互补状态这样的话,项目最终会在8084端口启动,访问的项目路径为 test,访问的 url 为:http://localhost:8084/test/xxx

⚠️注意:在项目打包上线时,使用 Maven 打包,Maven 并不会把 src 目录外的内容打到 jar 包之内,所以导致 file:./config/file:./这两种方式的配置不生效。此时我们还可以通过 --spring.config.location 命令参数的方式来改变默认的配置文件位置,只需要在启动时指定配置文件的新位置即可。

        项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;从而使指定的配置文件和默认加载的配置文件共同起作用形成互补配置;

java -jar spring-boot-SNAPSHOT.jar --spring.config.location=D:/application.properties

2.外部配置文件

       Spring Boot 也可以从以下位置加载配置; 优先级从高到低;高优先级的配置会覆盖低优先级的配置,所有的配置会形成互补配置。

       官方文档一共为我们提供了 17 种,来加载外部配置文件,请:参考官方文档。此处来介绍我们常用的几种方式。(以下介绍的4种,优先级1 → 4 由高到低,命令行参数级别最高)

1.命令行参数

  所有的配置都可以在命令行上进行指定.

java -jar spring-boot-SNAPSHOT.jar --server.port=8888 --server.context-path=test 多个配置用空格分开

2.jar包外部的配置文件 jar包需和配置文件在同一个路径文件下

1. jar 包外部的 application-{profile}.properties 或 application.yml(带spring.profile)配置文件
2. jar 包内部的 application-{profile}.properties 或 application.yml(带spring.profile)配置文件
再来加载不带profile
3. jar 包外部的 application.properties 或 application.yml(不带spring.profile)配置文件
4. jar 包内部的 application.properties 或 application.yml(不带spring.profile)配置文件
在这里插入图片描述

3.@Configuration注解类上的@PropertySource
4.通过SpringApplication.setDefaultProperties指定的默认属性


在这里插入图片描述


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Spring配置文件加载优先级由以下顺序决定: 1. 在classpath根路径下寻找的application.properties或application.yml文件; 2. 在classpath根路径下寻找的application-{profile}.properties或application-{profile}.yml文件; 3. 在classpath根路径下寻找的spring.properties文件; 4. 在classpath根路径下寻找的spring.xml文件; 5. 在classpath根路径下寻找的{filename}.properties文件; 6. 在classpath根路径下寻找的{filename}.yml文件; 7. 在classpath根路径下寻找的{filename}.xml文件; 8. 在文件系统中寻找的config目录下的application.properties或application.yml文件; 9. 在文件系统中寻找的config目录下的application-{profile}.properties或application-{profile}.yml文件; 10. 在文件系统中寻找的config目录下的{filename}.properties或{filename}.yml文件; 11. 在文件系统中寻找的config目录下的{filename}.xml文件; 12. 在jar包内寻找的/META-INF/spring.factories文件。 如果有多个文件符合要求,那么它们将按照上述顺序进行合并,后加载的配置将覆盖先加载的配置。 ### 回答2: Spring配置文件加载优先级是根据不同的方式来决定的。在Spring中,可以通过多种方式来加载配置文件,包括通过XML配置(如applicationContext.xml)、通过注解和通过Java代码配置等方式。 首先,在使用XML配置的情况下,Spring框架会首先查找默认的配置文件 applicationContext.xml 来加载配置信息,如果没有默认配置文件,框架会报错。如果存在默认配置文件,那么可以使用其它名称的XML配置文件来进行覆盖或扩充配置。例如,可以使用 `<import>` 元素来引入其它的配置文件,而引入的配置文件会按照顺序进行加载。 其次,在使用注解的情况下,Spring框架会扫描指定的包路径,查找带有相应注解的类,并将其作为配置类加载。可以使用 `@ComponentScan` 注解来指定扫描的包路径,也可以使用 `@Import` 或 `@ImportResource` 注解来导入其它的配置类或XML配置文件。 最后,在使用Java代码配置的情况下,Spring框架会通过编写配置类来进行配置。可以使用 `@Configuration` 注解标识一个类为配置类,并在该类中使用 `@Bean` 注解来定义需要创建的Bean。在使用Java配置时,Spring框架会将这些配置类作为参数进行加载。 总的来说,Spring配置文件加载优先级为:默认XML配置文件 > 其它XML配置文件 > 注解扫描 > Java配置类。在加载的过程中,后加载的配置会覆盖前面加载的配置,从而实现对配置文件的灵活管理和定制。 ### 回答3: Spring配置文件加载优先级主要取决于以下几个因素: 1. 默认配置文件位置:Spring框架会默认加载位于classpath根目录下的名为"applicationContext.xml"的配置文件。如果该文件存在,则会自动加载优先级最高。 2. 自定义配置文件位置:开发者可以通过在web.xml或者Spring配置文件中指定需要加载配置文件路径。如在web.xml中配置contextConfigLocation参数,或在@Configuration注解类中使用@PropertySource注解指定配置文件路径。 3. 注解配置类:使用@Configuration注解标记的Java配置类,可以替代XML配置文件Spring会自动扫描这些类,并将其作为配置文件加载。注解配置类的加载顺序比xml配置文件更早。 4. @Import注解:@Import注解可以用于导入其他配置类,以声明式地将多个配置类组织在一起。通过@Import注解导入的配置类会先于其他配置文件进行加载。 综上所述,Spring配置文件加载优先级为:注解配置类 > @Import注解 > 自定义配置文件位置 > 默认配置文件位置。 同时,根据不同的实际项目需求,我们可以使用多个配置文件进行配置,通过上述方式控制加载的顺序和优先级,以满足不同场景下的配置需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扛麻袋的少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值