SpringBoot配置文件加载顺序
SpringBoot配置文件加载顺序
一、引言
如果我们了解SpringBoot
配置文件的加载顺序,对项目的开发和部署会有很大的帮助。举个工作中的例子,我们的项目是微服务架构模式,用Nacos
做注册中心(可以配置每个微服务),所有服务请求需要通过网关,由网关做统一的鉴权和路由转发。环境有三套,本地环境、测试环境、网络环境。
每套环境都有自己的Nacos
配置和数据库配置,难道我们每次打包到不同环境都有修改完配置文件再打包?开发的时候再一个一个改回来?答案当然是:No。
So,了解SpringBoot
配置文件的加载顺序还是很有必要的。
二、SpringBoot配置文件的加载顺序
1、项目内配置文件加载顺序
SpringBoot
项目启动会扫描以下位置的application.properties
或者application.yml
文件作为SpringBoot
的默认配置文件,具体的目录位置见下图。
- file:./config/ ( 项目根路径下的config文件夹)
- file:./ (项目根路径)
- classpath:/config/ (类路径下的config文件夹)
- classpath:/ (类路径)
四个位置的配置文件中端口分别配置为:8081、8082、8083、8084。并启动程序,发现8081端口起作用。
从上面的位置,逐一注释掉配置文件中的配置项,启动项目,会发现配置文件逐一会起作用。下面是注释掉8081的配置,启动项目后,发现8082会起作用。可以逐一注释验证。
上面四个位置的配置文件位置,优先级由高到底,高优先级的配置会覆盖低优先级的配置,没有的配置进行互补配置。
注意:不是类路径下的配置文件在打包时,如果不做配置是不会打包进jar中的,也会是说前两个配置在项目打包后,包中是不存在的,所以尽量不要用前两个位置。
2、外部配置文件
当我们把项目打包后,如何在配置SpringBoot项目呢?
(1)、命令行参数
项目打包好以后,我们可以使用命令行参数的形式,来改变想改变的几个参数,直接在启动命令后添加启动参数,如果有多个配置项,可以用空格分开。
java -jar springboot-configuration.jar --server.port=8088 --server.servlet.context-path=/spring
(2)、spring.config.location
在第一种情况下,如果参数数量过多,我们就要考虑配置文件了,我们在启动项目的时候可以用spring.config.location
来指定配置文件的新位置。指定的配置文件和jar包中默认加载的配置文件共同起作用形成互补配置。
指定配置文件从F盘下读取
java -jar springboot-configuration.jar --spring.config.location=F:/application.properties
3、配置文件加载顺序小结
外部配置加载顺序SpringBoot
也可以从以下位置加载配置:
优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 。
- 命令行参数。所有的配置都可以在命令行上进行指定;
- 来自
java:comp/env的JNDI属性
; Java系统属性
(System.getProperties()
);- 操作系统环境变量 ;
- jar包外部的
application-{profile}.properties
或application.yml
(带spring.profile)配置文件 - jar包内部的
application-{profile}.properties
或application.yml
(带spring.profile)配置文件 再来加载不带profile - jar包外部的
application.properties
或application.yml
(不带spring.profile)配置文件 - jar包内部的
application.properties
或application.yml
(不带spring.profile)配置文件 @Configuration注解类上的@PropertySource
根据第7条,我们只要在jar包同目录外放置一个application.properties
配置文件,就会起作用,同时这个配置文件的优先级还比jar内的高,这个配置很有作用!!
具体可以参看官方文档:
SpringBoot配置文件加载顺序官方文档
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)