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

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

开发者学堂课程【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,可以看到有效果

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

相关文章
|
SQL 数据库
达梦(DM) SQL数据及字符串操作
继续讲述DM数据库Sql操作
|
设计模式 Go 开发工具
Golang设计模式——12中介模式
Golang设计模式——12中介模式
79 0
|
7月前
|
数据采集 安全 API
ChatGPT API漏洞可能导致DDoS和注入攻击
ChatGPT API漏洞可能导致DDoS和注入攻击
|
运维 自然语言处理 安全
自动化运维的利器:Ansible入门与实践
【8月更文挑战第33天】在现代IT基础设施的管理中,自动化运维已成为提高效率、减少错误的关键技术。Ansible作为一款开源的自动化配置管理和应用部署工具,以其简洁性、易用性和强大的功能受到广泛欢迎。本文将介绍Ansible的基本概念、安装步骤和简单使用,通过实际案例展示其在自动化运维中的应用。
|
Java Apache
java依赖冲突解决问题之NoClassDefFoundError异常如何解决
java依赖冲突解决问题之NoClassDefFoundError异常如何解决
|
12月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
662 23
|
存储 数据处理 数据库
深入了解达梦数据库的增删查改操作:从入门到精通
深入了解达梦数据库的增删查改操作:从入门到精通
994 4
|
12月前
|
前端开发
伪类中使用element图标
如何在CSS伪类中使用Element UI图标,以及伪类与伪元素在CSS3中的区别和应用。
115 1
伪类中使用element图标
|
API Go
LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计2
LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计2
117 0

热门文章

最新文章