springboot配置文件加载顺序

引言

了解SpringBoot配置文件的加载顺序,对项目的开发和部署会有很大的帮助,不同环境加载不同的配置文件,不必再修改配置文件。

springboot配置文件加载顺序

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

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

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

启动项目可看到使用的8080端口,最优先使用的配置文件./config/ ( 项目根路径下的config文件夹)

 把8080的配置文件注释掉,再启动项目

 可看到使用的8083端口,使用的file:./  (项目根路径)的配置文件

再把该配置文件注释掉,再启动项目

 这次使用的是8081端口,使用的是classpath:/config/ (类路径下的config文件夹)的配置文件

再将该配置文件注释掉,再次启动项目

 可以看到这次使用的是classpath:/ (类路径)下配置文件

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

 最后将项目打包为jar包,并将该jar包解压缩后查看上述四个配置文件:

 

 jar包中只发现两个在类路径下的application.yml配置文件,不是类路径下的配置文件在打包时,如果不做配置是不会打包进jar中的,也会是说前两个配置在项目打包后,包中是不存在的,所以尽量不要用前两个位置

2、外部配置文件

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

(1)命令行参数

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

java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8088 --server.servlet.context-path=/api

启动项目时在命令行添加指定的生效配置参数,可以看到配置的8088端口已经生效了。

(2)外置配置文件

如果需要配置的参数较多,使用命令行添加参数的方式就容易出错且繁琐了,可以将要使用的参数都写在配置文件中,启动项目的时候可以用spring.config.location来指定配置文件的新位置。指定的配置文件和jar包中默认加载的配置文件共同起作用形成互补配置。

启用项目时使用E盘下的application.yml配置文件,在该配置文件中指定端口号8089

可看到指定外置配置文件中的端口8089已经生效,指定的配置文件和jar包中默认加载的配置文件共同起作用形成互补配置。

(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内的高,这个配置十分有用。

  在jar包同路径下放置一个配置了端口号为8087的application.yml再次启动项目

可以看到8087端口已经生效了,而且比在jar包里的application.yml中配置的优先级高。

当然springboot官方推出的配置方式比上述的全面,具体可参考springboot官网讲述的配置文件加载顺序

 

posted @ 2022-01-25 17:32  wang_longan  阅读(9556)  评论(0编辑  收藏  举报