springboot启动会扫描以下位置的application.properties
或者application.yaml
文件作为Spring boot的默认配置文件
优先级由高到低顺序为:
file:./config/
file:./
classpath:/config/
classpath:/
如图所示:
如果不同优先级的配置文件中存在相同的属性配置,那么高优先级的配置文件中的配置将覆盖低优先级的配置文件中的配置
同时,SpringBoot会将这四个位置的配置文件全部加载,因此会形成一种互补配置,即:如果配置的类型相同,如四个配置文件都配置了端口号server.port
,那么将会使用四个配置文件中配置了server.port
的最高优先级配置文件的server.port
配置;而互补配置
体现在四个配置文件配置不相交的属性,如最高优先级配置文件配置了server.port=8084
,最低优先级配置文件配置了项目的访问路径server.servlet.context-path=/boot
创建一个HelloController
@ResponseBody
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello()
{
return "sdfghjkl Hello";
}
}
当前配置情况为:最高优先级配置文件配置了server.port=8084
,最低优先级配置文件配置了项目的访问路径server.servlet.context-path=/boot
那么此时应该访问的端口就是8084端口而不是8080端口,但是访问http://localhost:8084/hello
会报404错误,因为在低优先级的配置文件中我们指定了访问路径,因此应该访问http://localhost:8084/boot/hello
扩展:
我们还可以通过spring.config.location
来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties
spring-boot-02-config-02-0.0.1-SNAPSHOT.jar
为项目打包名称
D:/application.properties
指定的配置文件的位置