有的时候,配置信息是咱们没法在开发过程当中就能肯定的。好比,给客户开发的项目,客户须要根据自身的状况自定义配置,如数据库配置,加密密钥配置等等。这时候,就须要把配置文件放在外面,让用户自定义配置部署了。java
SpringBoot应对这种状况简直就是游刃有余,其有多种加载配置文件的方式。下面咱们就来认识一下spring
SpringBoot支持把配置文件放在外部。只要把配置文件放在jar包的同级目录下,或者放在同级下的config文件夹中,SpringBoot都会去此处读取配置文件。如今有一个springboot打包程序,和一个配置文件(jar程序打包的时候,没有设置端口号):数据库
如今启动程序,查看结果:springboot
经过java -jar命令启动,发现其已经读取到了9876这个端口号的配置。测试
一样的,咱们能够放在config目录下再测试看看结果:加密
依然是在9876端口启动了。3d
以上两个例子,说明了配置文件是能够放在外部的。cdn
这里总结下,springboot的配置文件能够打包时打jar包内部,也能够放在jar包外部。springboot的配置文件,还能够放在config目录下(这里包括jar包外部同级的config目录,也包括jar内部的config目录)。server
总的来讲,配置文件的加载顺序以下:blog
外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录
咱们不妨在这四个地方都写同一个配置不一样的值来验证一下这个顺序。
在resources目录下建立一个config文件夹,文件夹内的配置端口号为9999,文件夹外部的端口号为8888,以下:
启动程序:
经过结果能够看到,读取的是config目录下的配置文件。
打包测试,两个配置文件的配置以下图所示:
启动测试:
发现启动的是config目录下的配置:7777端口。
接下来,咱们只须要再证实外部同级目录 > jar包内部config目录,那么上面的结论就成立了。咱们把config目录删掉,而后测试:
这证实了上面的结论:外部config目录 > 外部同级目录 > jar包内部config目录 > jar包内部同级目录 是成立了
经过上面的分析,咱们知道了,外部config目录的配置文件是优先级最高的。假如该配置文件没有设置server.port默认值的时候,那么就会往下一级配置文件去寻值,若是全部配置文件都找不到,那么将会读取默认的值。server.port这个默认值,是springboot内部给咱们提供的,其默认就是8080。
那么咱们要怎么给咱们自定义的配置项设置默认值呢?其实很简单,只须要使用一个":"便可
启动程序,访问该接口:
咱们没有在任何一处配置文件中配置name的值,因此读取了默认值。
本文讲解了SpringBoot项目的多种放配置文件的方式,而且讲解了各类配置文件的加载顺序。在配置文件中都不存在值的时候,最后才会去读取默认值。配置文件的加载顺序,在实际开发中,仍是常常会涉及到的。