springboot 配置文件读取以及顺序问题 - Go语言中文社区

springboot 配置文件读取以及顺序问题


大家推荐个靠谱的公众号程序员探索之路,大家一起加油,这个公众号已经接入图灵https://img-blog.csdnimg.cn/20181129224604602.png ​  

汗颜啊!!!springboot学到现在连最基本的配置文件顺序为题还不知道

1.SpringBoot配置文件
SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。
以设置应用端口为例
properties文件示例(application.properties):

server.port=8001
YAML文件示例(application.yml):

server:
  port: 8002

两者同时存在情况
假如各配置文件都配置了不同的端口,那么SpringBoot会使用哪一个端口呢?带着疑问试验一下实例
运行结果:

o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8001 (http)

结论:可见在同一目录下,properties配置优先级 > YML配置优先级。

//所以我们在jar包启动时带上properties写法的配置可以覆盖配置
2.配置文件目录
SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。
可放置目录(优先级从高到低)

file:./config/ (当前项目路径config目录下);
file:./ (当前项目路径下);
classpath:/config/ (类路径config目录下);
classpath:/ (类路径config下).
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载配置文件并互补配置;
我们可以从ConfigFileApplicationListener这类便可看出,其中DEFAULT_SEARCH_LOCATIONS属性设置了加载的目录:

private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";
接着getSearchLocations方法中去逗号解析成Set,其中内部类Loader负责这一配置文件的加载过程,包括加载profile指定环境的配置,以application+’-’+name格式的拼接加载。

多种目录配置同时存在情况
接下来还是以端口配置为例

1.在resources/config目录下配置文件设置端口为8010;
2.在resources/目录下配置文件设置端口为8020;
3.在类路径config目录下配置文件设置端口为8030;
4.在类路径下配置文件设置端口为8040;

最终运行结果:

o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8010 (http)

通过控制变量法得以论证其优先级由高到底,高优先级的配置会覆盖低优先级的配置
 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yueloveme/article/details/87391342
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 22:08:33
  • 阅读 ( 1046 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢