SpringBoot系列之配置文件加载位置
SpringBoot启动会自动扫描如下位置的application.properties或者application.yml文件作为Springboot的默认配置文件
- project:/config/(项目根目录下面config文件夹里的配置文件)
- project:/(项目根目录下面的配置文件)
- classpath:/config/(Resources文件夹下面config文件夹里的配置文件)
- classpath:/(Resources文件夹下面的配置文件))
如图所示,在resources文件夹下面建个config文件夹,往里面丢个application.properties配置文件,再往resources根目录下面也丢个application.properties文件
先往resources根目录下面的application.properties配置文件写几个参数:
# 配置端口为8070
server.port=8070
# 配置contextPath
server.servlet.context-path= /example
再往config文件夹下面的application.properties配置文件添加加个参数:
# 匹配端口为8081
server.port=8081
启动一下项目,在Springboot项目的控制台可以看到打印输出
当然你想写个控制类测试一下也是可以的
package com.example.springboot.properties.conroller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping(value = {"/hello","/sayHello"})
public String sayHello(){
return "hello world!";
}
}
ok,启动项目,经过验证访问 http://localhost:8081/example/hello 才是可以访问的,8080端口不可以访问,而context-path: /example是配在resources根目录下面的,这个属性配置没被覆盖,其端口配置就被覆盖了,所以我们可以得出,Springboot项目启动时是会先读取config文件夹里的配置文件,因为只配了一个端口的,所以就只读端口的,接着,低优先级的application.properties没被覆盖的配置属性还是会被读取的,所以我们也可以说配置文件的读取存在互补配置的特性
ok,继续验证,如图所示:
按照同样的方式,验证放在4个位置的application.properties读取优先级,通过实践验证,可以得出:
Springboot项目启动时会按照如下顺序由高到低读取配置,高优先级的属性会覆盖低优先级的属性,属性文件之间存在互补配置的特性
- project:/config/(项目根目录下面config文件夹里的配置文件)
- project:/(项目根目录下面的配置文件)
- classpath:/config/(Resources文件夹下面config文件夹里的配置文件)
- classpath:/(Resources文件夹下面的配置文件))
ok,这里介绍了Springboot项目启动时属性文件的读取顺序,当然我们也是可以通过spring.config.location
来指定默认配置文件的位置
可以将参数加在启动时候的虚拟机参数里:
代码 -Dspring.config.location=D:/application.properties
项目启动参数里加也是可以的
丢在application.properties配置文件里?
很显然是不起效的,因为一个配置文件,肯定不能指定其它配置文件
java -jar命令也是可以的,首先要maven packagejava -jar springboot-properties-config-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties
idea有些版本是有teminal命令台,可以直接在里面敲命令,没有的话就只能通过cmd直接敲命令的