程序员社区

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♪(・ω・)ノ

赞(0) 打赏
未经允许不得转载:IDEA激活码 » Spring Boot 之 内部/外部配置文件加载、优先级问题

一个分享Java & Python知识的社区