配置文件加载位置,及优先级
配置文件加载位置:
springboot启动会扫描以下位置的application.properties或则application.yml文件作为Springboot的
默认配置文件
-file:./config/ (主目录下的config文件下)
-file:./ (主目录下)
-classpath:/config/ (resource文件夹下的config文件夹)
-classpath:/ (resource文件夹下)
以上按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置内容
注意:所有位置的配置文件都会被加载,只是在对同一配置上,优先级高的会覆盖优先级低的,其它配置仍然起作用;
如:
优先级:P1文件>P2文件,
P1:A=a1,B=b1,C=c1,F=f1;
P2:A=a2,B=b2,D=d2,E=e2;
最后运行的配置信息应该为:
A=a1,B=b1,C=c1,D=d2,E=e2,F=f1 (即只有AB的内容被覆盖了,其它的不做改变)
配置文件自动提示失效
在学习过程中,发现有时候编写配置文件的时候,发现有的可以有自动提示补全功能,而有些没有自动提示补全的功能,但在反复测试后,发现带有图标的有自动提示功能:
而当为普通文件时,则没有该功能:
解决思路:
- 一定要保证引入了配置提示功能的依赖
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
-
如果是yml,切换成properties,如果是properties,切换成yml,然后刷新一下或则
重启,如果出现自动提示的图标就表示可以用自动提示补全功能了; -
在测试中发现一下两个位置的文件类型不能一致,一致时,最后创建的文件就变成普通文件,没有自动提示,而在保证其一个为yml,而另一个为properties时,就都可以自动提示补全了
-classpath:/config/ (resource文件夹下的config文件夹)
-classpath:/ (resource文件夹下)
其它的配置记录
server:
servlet:
context-path: /boot02
之后访问路径要从localhost:8083/hello变成localhost:8083/boot02/hello
即是在@RequestMapping("/hello")前增加content-path的内容
我们还可以通过spring.config.location来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;
指定配置文件和默 认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties
解释:使用G盘下的application.properties中的配置覆盖已经打完jar包的配置
debug=true
//此命令下可以查看自动配置类,哪些生效了