spring boot中配置文件的加载位置以及优先级

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/yu0_zhang0/article/details/83789773

配置文件加载位置

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。

–file:./config/

–file:./

–classpath:/config/

–classpath:/

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置

下面我们进行测试看看是不是上面所说:

  1. resource目录下创建application.properties ,在配置文件中配置端口号
    server.port=8081 8081端口启动 (对应classpath:/
  2. resource目录下创建config目录,在config目录中创建application.properties ,在配置文件中配置端口号server.port=8082 8082端口启动 (对应classpath:/config/
  3. 我们直接在创建项目的目录下创建一个application.properties,在配置文件中配置端口号server.port=8083 8083端口启动 (对应file:./
  4. 我们在项目目录下创建一个config目录,在config目录中创建application.properties ,在配置文件中配置端口号server.port=8084 8084端口启动 (对应file:./

这里测试的是优先级问题,那什么叫互补呢,其实也好理解,spring boot 会按照优先级来扫描配置文件,如果低优先级配置了端口和访问路径,而高优先级的配置文件只配置端口那么我们只会覆盖端口,而访问路径是有效的,下面我们通过一个例子来说明。

  1. resource目录下创建application.propertiesclasspath:/路径
# 配置端口号
server.port=8081

#配置访问路径
#server.context-path=/spring
server.servlet.context-path=/spring
  1. 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盘中。

猜你喜欢

转载自blog.csdn.net/yu0_zhang0/article/details/83789773