美文网首页
关于springboot配置文件路径优先级

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

作者: 冬天里的懒喵 | 来源:发表于2021-02-02 15:00 被阅读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的时候,就很清楚配置文件应该存在于什么位置是最合适。

    相关文章

      网友评论

          本文标题:关于springboot配置文件路径优先级

          本文链接:https://www.haomeiwen.com/subject/zzjytltx.html