转载

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

有的时候,配置信息是我们无法在开发过程中就能确定的。比如,给客户开发的项目,客户需要根据自身的情况自定义配置,如数据库配置,加密密钥配置等等。这时候,就需要把配置文件放在外面,让用户自定义配置部署了。

SpringBoot应对这种情况简直就是游刃有余,其有多种加载配置文件的方式。下面我们就来认识一下

配置文件放在外部

SpringBoot支持把配置文件放在外部。只要把配置文件放在jar包的同级目录下,或者放在同级下的config文件夹中,SpringBoot都会去此处读取配置文件。现在有一个springboot打包程序,和一个配置文件(jar程序打包的时候,没有设置端口号):

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

现在启动程序,查看结果:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

通过java -jar命令启动,发现其已经读取到了9876这个端口号的配置。

同样的,我们可以放在config目录下再测试看看结果:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

依然是在9876端口启动了。

以上两个例子,说明了配置文件是可以放在外部的。

配置文件加载顺序

这里总结下,springboot的配置文件可以打包时打jar包内部,也可以放在jar包外部。springboot的配置文件,还可以放在config目录下(这里包括jar包外部同级的config目录,也包括jar内部的config目录)。

总的来说,配置文件的加载顺序如下:

外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录

我们不妨在这四个地方都写同一个配置不同的值来验证一下这个顺序。

在resources目录下创建一个config文件夹,文件夹内的配置端口号为9999,文件夹外部的端口号为8888,如下:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

启动程序:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

通过结果可以看到,读取的是config目录下的配置文件。

打包测试,两个配置文件的配置如下图所示:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

启动测试:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

发现启动的是config目录下的配置:7777端口。

接下来,我们只需要再证明外部同级目录 > jar包内部config目录,那么上面的结论就成立了。我们把config目录删掉,然后测试:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

这证明了上面的结论:外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录 是成立了

配置项默认值

通过上面的分析,我们知道了,外部config目录的配置文件是优先级最高的。假如该配置文件没有设置server.port默认值的时候,那么就会往下一级配置文件去寻值,如果所有配置文件都找不到,那么将会读取默认的值。server.port这个默认值,是springboot内部给我们提供的,其默认就是8080。

那么我们要怎么给我们自定义的配置项设置默认值呢?其实很简单,只需要使用一个":"即可

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

启动程序,访问该接口:

「快学SpringBoot」配置文件的加载顺序和配置项默认值设置

我们没有在任何一处配置文件中配置name的值,所以读取了默认值。

总结

本文讲解了SpringBoot项目的多种放配置文件的方式,并且讲解了各种配置文件的加载顺序。在配置文件中都不存在值的时候,最后才会去读取默认值。配置文件的加载顺序,在实际开发中,还是经常会涉及到的。

原文  https://juejin.im/post/5d0cdd145188253296402fbf
正文到此结束
Loading...