配置文件加载位置
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
下面我们进行测试看看是不是上面所说:
- 在
resource
目录下创建application.properties
,在配置文件中配置端口号
server.port=8081
8081端口启动 (对应classpath:/) - 在
resource
目录下创建config目录,在config目录中创建application.properties
,在配置文件中配置端口号server.port=8082
8082端口启动 (对应classpath:/config/) - 我们直接在创建项目的目录下创建一个
application.properties
,在配置文件中配置端口号server.port=8083
8083端口启动 (对应file:./) - 我们在项目目录下创建一个config目录,在config目录中创建
application.properties
,在配置文件中配置端口号server.port=8084
8084端口启动 (对应file:./)
这里测试的是优先级问题,那什么叫互补呢,其实也好理解,spring boot 会按照优先级来扫描配置文件,如果低优先级配置了端口和访问路径,而高优先级的配置文件只配置端口那么我们只会覆盖端口,而访问路径是有效的,下面我们通过一个例子来说明。
- 在
resource
目录下创建application.properties
(classpath:/路径)
# 配置端口号
server.port=8081
#配置访问路径
#server.context-path=/spring
server.servlet.context-path=/spring
- 在
resource
目录下创建config目录,在config目录中创建application.properties
(classpath:/config/)
# 配置端口号
server.port=8082
我们创建一个controller看看如何访问
@RestController
public class HelloController {
@RequestMapping(method = RequestMethod.GET,path = "/hello")
public String hello(){
return "hello";
}
}
启动项目后我们看看这一句日志Tomcat started on port(s): 8082 (http) with context path '/spring'
端口被覆盖,但是访问路径要加/spring。这就是互补的意思。
我们还可以通过spring.config.location来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties
我们要把配置文件放在D盘中。