SpringBoot系列之配置文件加载位置

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 package
在这里插入图片描述
java -jar springboot-properties-config-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties

idea有些版本是有teminal命令台,可以直接在里面敲命令,没有的话就只能通过cmd直接敲命令的

猜你喜欢

转载自www.cnblogs.com/mzq123/p/11830422.html
今日推荐