配置文件的加载位置|学习笔记

简介: 快速学习配置文件的加载位置

开发者学堂课程【SpringBoot快速掌握 - 核心技术配置文件的加载位置】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9229


配置文件的加载位置


目录

一、配置文件的加载位置

二、互补配置

 

一、配置文件的加载位置

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

Ø -file:./config/

Ø -file:./

Ø -classpath:/config/

Ø -classpath:/

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

spring boot在启动的时候会把application.properties或者application.yml作为主配置文件,但是它的配置文件位置既可以放在resources里,也可以放在指定位置。

比如第一个位置,放在当前项目文件路径下的config文件夹里;或者直接放在当前项目文件路径下;或者放在内路径下的config里面;或者放在内路径下的根目录里面。这4个位置spring boot都可以识别,而且它是按照这4个位置的优先级,先来加载第一个位置的文件,然后依次往下加载,优先级由高到低。如果第一个文件里面配置的内容已经加载过,在最后一个文件里面也有配置相同的内容,那么高优先级就会覆盖低优先级。那么来试验一下

创建新项目,在Group处填入com.atguigu,在Artifact处填入spring -boot-02-config-02,选中Web模块,就完成了。

image.png

image.png

这里的主配置文件默认放在内路径下的application.properties里。比如调整一个端口号server.port=8081,启动即可看到Tomcat started on port(s): 8081即以8081为端口启动。

Tomcat started on port(s): 8081http

spring boot还识别下面的内容:

在内路径resources下写一个config文件夹,将application.properties配置在这里复制一份,调整为server.port=8082端口。按照优先级的顺序,那么内路径下的config文件夹里面的东西比内路径根目录下的东西优先级更高,所以这里应该是8082端口。启动测试可以看到是Tomcat started on port(s): 80828082端口。

Tomcat started on port(s): 8082http

 

把更高的两个优先级测试一下:

在当前项目的根目录下放一个application.properties,调整为server.port=8083,启动可以看到是Tomcat started on port(s): 80838083端口。

Tomcat started on port(s): 8083http

包括给当前项目文件路径下,写一个config文件夹,然后把它放在application.properties里,默认server.port=8084,那按照优先级,文件路径下的config文件夹里面的优先级是最高的,启动,用的Tomcat started on port(s): 80848084端口

Tomcat started on port(s): 8084http

总结:优先级由高到底,高优先级的配置会覆盖低优先级的配置;SpringBoot会从这四个位置全部加载主配置文件;高优先级有了后边还要加载形成一种效果,叫作互补配置

 

二、互补配置

什么是互补配置?举个例子:

首先来到默认配置文件,这个配置文件里配置了端口,但是最终生效的是最高优先级的8084端口。在低优先级里配置server.context-path=/ boote2注释配置项目的访间路径。为了访问路径能测出效果,一个controller.HelloController:

package com.atguigu.springboot02config02;

import ...

@SpringBootApplication

public class SpringBoot02Config02Application {

public static void main(String[] args) {

SpringApplication.run(SpringBoot02Config02Application.class,args);

}

}

启动看到输出为8084端口有效果,是因为用到最高优先级的8084端口,再访问hello请求,输入locallhost:8084/boot02/hello回车,能看到起作用。也就是它们会形成互补配置,比如文件的内容,高优先级的用高优先级,没有配置的可以用低优先级来形成整个互补配置。这是非常方便的,可以用高优先级只覆盖一些部分内容,那么低优先级配置全部内容。

还可以通过spring.config.location来改变默认的配置文件位置,举个例子:将默认配置文件在G盘复制一份,并输入spring.config.Location=G: /application.properties设置server.port=8085即8085端口,启动查看能否用到G盘上的它,如果能用到那么就是8085端口。但是发现还是Tomcat started on port(s): 80848084端口。

server. port=8081

#配置项目的访间路径

server.context-path=/ boot02

#spring.config.Location=G: /application.properties

这时候就需要将项目打包,项目打包好以后,可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定配置文件和默认加载的这些配置文件共同起作用形成互补配置

对spring-boot-02-config-02进行打包,打包成功之后会在target目录下形成spring-boot-02-config-02-0.0.1-SNAPSHOT.jar

访问Terminal控制台,输入cd target,再输入dir查看目录,可以看见有target的jar压缩包,然后输入java -jar spring-boot-02-config-02-0.0.1-SHAPSHOT.jar –spring.config.location= G: /application.properties回车启动,可以看到现在访问了Tomcat started on port(s): 8085即8085端口。

访问hello请求,输入locallhost:8085/boot02/hello,可以看到有效果

这个特性在运维的时候非常好用,比如把项目已经打包成功了,但是由于在后来可能需要修改一些配置,只需要编写少量的配置,把项目重新启动,让它加载新改的配置,项目原有的配置也会存在,新改的配置也会运用上,不需要把整个项目重新改完再运行,这就是配置文件的加载位置从高到低依次往下加载形成互补配置。

相关文章
|
Java Maven Spring
maven项目,动态读取外部配置文件
maven项目,动态读取外部配置文件
305 0
|
1月前
|
PyTorch TensorFlow API
大模型中 .safetensors 文件、.ckpt文件、.gguf和.pth以及.bin文件区别、加载和保存以及转换方式
本文讨论了大模型中不同文件格式如`.safetensors`、`.ckpt`、`.gguf`、`.pth`和`.bin`的区别、用途以及如何在TensorFlow、PyTorch和ONNX等框架之间进行加载、保存和转换。
267 2
|
5月前
|
存储 Java Maven
win自定义配置本地maven仓库位置,修改maven仓库位置
win自定义配置本地maven仓库位置,修改maven仓库位置
118 0
win自定义配置本地maven仓库位置,修改maven仓库位置
|
6月前
|
Java Spring
SpringBoot中配置文件加载位置与优先级
SpringBoot中配置文件加载位置与优先级
113 0
|
Java Spring
08 SpringBoot配置文件加载位置
08 SpringBoot配置文件加载位置
42 0
无法找到可用的配置文件来构建预处理器
无法找到可用的配置文件来构建预处理器
91 0
|
存储
jupyter修改默认存储路径
jupyter修改默认存储路径
200 0
|
Java 容器 Spring
实现EnvironmentAware接口 将配置文件中的属性放置到系统环境变量中
实现EnvironmentAware接口 将配置文件中的属性放置到系统环境变量中
332 31
|
XML 数据库 数据格式
idea使用c3p0数据库连接池无法加载配置文件xml,配置文件放置的位置
idea使用c3p0数据库连接池无法加载配置文件xml,配置文件放置的位置
278 0
idea使用c3p0数据库连接池无法加载配置文件xml,配置文件放置的位置
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了
429 0
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了