关于springboot配置文件路径优先级

2021-02-02  本文已影响0人  冬天里的懒喵

在springboot项目中,最重要的配置文件是application.yaml文件。然而这个文件究竟应该放置在什么位置呢?在实际操作的过程中,配置文件可以存在的路径如下表:

配置文件位置 说明
file:./config/ 为于project目录下的config目录,实际上对应于jar文件同一目录的config目录。
file:./ projet目录。实际上对应于jar文件的同一目录。
classpath:/config/ jar包内的文件目录,对应代码的resource目录中的config
classpath:/ jar包内的文件,对应代码的resource目录。

上述4个路径都能放置application.yaml文件,那么现在我们来测试上述4个位置的优先级。
以MySpringBoot项目为例:


image.png

我们将上述4个配置文件的server port分别配置为 8081、8082、8083、8084。

server:
  port: 8081

之后我们启动springboot项目:

2021-02-02 14:49:03.491  INFO 16724 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-02-02 14:49:03.514  INFO 16724 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2021-02-02 14:49:03.521  INFO 16724 --- [  restartedMain] com.dhb.MySpringBootApplication          : Started MySpringBootApplication in 1.38 seconds (JVM running for 2.044)

可以看到,springboot实际上监听的是8081端口。
说明file:./config/ 的优先级是最高的。
之后我们将这个位置对应的配置文件删除再启动:

2021-02-02 14:50:43.153  INFO 18276 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-02-02 14:50:43.175  INFO 18276 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8082 (http) with context path ''
2021-02-02 14:50:43.181  INFO 18276 --- [  restartedMain] com.dhb.MySpringBootApplication          : Started MySpringBootApplication in 1.406 seconds (JVM running for 2.013)

可以看到此时的配置文件,生效的是file:./ 下面的配置文件,此时的监听端口为8082。
我们再删除此文件之后启动:

2021-02-02 14:52:40.730  INFO 12004 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-02-02 14:52:40.755  INFO 12004 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8083 (http) with context path ''
2021-02-02 14:52:40.762  INFO 12004 --- [  restartedMain] com.dhb.MySpringBootApplication          : Started MySpringBootApplication in 1.409 seconds (JVM running for 2.031)

此时监听的端口是8083。
说明在classpath中的优先级,config目录下的优先级高于config目录之外的配置文件。
同样,我们再将此文件删除,重启,此时监听端口会变为8084。

2021-02-02 14:54:19.761  INFO 16200 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2021-02-02 14:54:19.784  INFO 16200 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8084 (http) with context path ''
2021-02-02 14:54:19.793  INFO 16200 --- [  restartedMain] com.dhb.MySpringBootApplication          : Started MySpringBootApplication in 1.392 seconds (JVM running for 2.011)

这样我们得到了springboot配置文件路径的优先级,file > classpath, 有config目录>无config目录。

配置文件位置 优先级顺序
file:./config/ 最高,1
file:./ 其次,2
classpath:/config/ 第三,3
classpath:/ 最低,4

这样我们再使用springboot的时候,就很清楚配置文件应该存在于什么位置是最合适。

上一篇下一篇

猜你喜欢

热点阅读