前言
上次分享了如何一步一步搭建一个springboot的项目,详细参见《5分钟快速搭建一个springboot的项目》,最终的结果是在”8080“端口搭建起了服务,并成功访问。不知道有小伙伴是否有疑惑,springboot应该有配置文件的,一般的配置文件都是application.properties或者application.yml,的确是这样的。但是我确实没有这些配置文件,服务正常在”8080“端口启动,这是因为在springboot内部有一套默认的机制。今天不聊这些默认的机制,聊一聊application.properties/application.yml文件。
一、application.properties/.yml文件初识
前面说到没有配置application.properties文件,现在我在main/resources文件夹下新建一个application.properties文件,并且写上如下的配置
然后,启动项目,
好了,通过上面的启动结果截图,看到服务在端口”9090“启动了。那么如果在该目录下在配置一个application.yml文件呐,
启动结果如下,
可以看到依然是在端口”9090“启动服务。为此得出这样个结论:在相同文件夹下如果有application.properties和application.yml两个文件,那么application.properties文件会覆盖application.yml文件,生效的是application.properties文件。
什么是yml文件
yml是由YAML (YAML Aint Markup Language)编写的文件格式,是一种很直观的数据序列化方式。很简单就是一种新的文件格式,和XML、prperties文件类似。
二、application.properties/.yml文件可以在其他路径吗
看到这个标题的小伙伴肯定会说,难道application.properties可以在其他路径,没错,猜对了。application.properties/.yml我们是放在了main/resources文件夹下,在项目运行的时候该文件夹下的文件会被拷贝到classes文件夹下,所以该路径又叫做classpath。
在springboot的源码中搜索”application.properties“,搜到ConfigFileApplicationListener这样一个类,在该类的注释上有下面这段话,
* {@link EnvironmentPostProcessor} that configures the context environment by loading
* properties from well known file locations. By default properties will be loaded from
* 'application.properties' and/or 'application.yml' files in the following locations:
* <ul>
* <li>file:./config/</li>
* <li>file:./config/{@literal *}/</li>
* <li>file:./</li>
* <li>classpath:config/</li>
* <li>classpath:</li>
* </ul>
大体意思是”EnvironmentPostProcessor通过从众所周知的文件路径加载properties来配置上下文环境。默认的properties来自application.properties/application.yml文件,这些文件来自以下路径“,
file:./config/ 根文件夹(项目文件夹)下的config目录
file:./config/{@literal *}/ 根文件文件夹(项目文件夹)下的config,file:./config/";