学透Spring Boot — 007. 七种配置方式及优先级

news2025/4/8 3:14:06

Spring Boot 提供很多种方式来加载配置,本文我们会用Tomcat的端口号作为例子,演示Spring Boot 常见的配置方式。

几种配置方式

使用默认配置

新建一个项目什么都不配置,Spring Boot会自动配置Tomcat端口号。
启动日志

TomcatWebServer  : Tomcat initialized with port 8080 (http)

TODO:以后会写一篇关于如何自动配置Tomcat的文章。

通过SpringApplication类

我们可以稍微修改一下我们的启动类

@SpringBootApplication
public class JoeLabApplication {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(JoeLabApplication.class);
        app.setDefaultProperties(Map.of("server.port", 9001));
        app.run(args);
    }
}

启动后,通过日志可以看到端口号已经变成9001.

TomcatWebServer  : Tomcat started on port 9001 (http) with context path '/'
通过配置文件application.yaml

我们在application.yaml中配置,这也是我们比较常用的方式

server:
  port: 9002

重启服务,可以看到端口已经变成了9002了

TomcatWebServer  : Tomcat started on port 9002 (http) with context path '/'
通过application.properties

有些开发比较习惯在属性配置文件中配置SpringBoot,也是可以的

server.port=9003

重启服务,可以看到端口号已经变成了9003

TomcatWebServer  : Tomcat started on port 9003 (http) with context path '/'
通过系统环境变量

启动参数中配置环境变量,也是比较常见的一种方式
在这里插入图片描述
重启服务,可以看到端口号已经变成了9004

TomcatWebServer  : Tomcat started on port 9004 (http) with context path '/'
通过JVM参数

我们可以配置VM参数(用-D开头)
在这里插入图片描述
重启服务,可以看到端口号已经变成了9005

TomcatWebServer  : Tomcat started on port 9005 (http) with context path '/'
通过命令行参数

我们用java 命令启动jar时,也可以传递参数,在IDEA中我们是这么设置的
在这里插入图片描述
重启服务,可以看到端口号已经变成了9006

TomcatWebServer  : Tomcat started on port 9006 (http) with context path '/'

配置优先级顺序

前面我们了解了几种最常用的配置方式,那如果同时配置了几种,那么那些优先级会更高呢?
我们从低到高对它们进行排序:

  1. 默认配置
  2. 通过SpringApplication类
  3. 通过配置文件application.yaml
  4. 通过配置文件application.properties
  5. 通过系统环境变量
  6. 通过JVM参数
  7. 通过命令行参数

也就是说命令行的参数配置是优先级是最高的,只要它配置了,Spring Boot就用它覆盖其它配置。默认配置优先级是最低的,只有其它几种都没有配置时,才会使用默认配置。

特别说明:虽然application.yaml和application.properties都可以配置,但不建议项目中同时用两种。因为有时我们忘记了优先级,导致可能遇到意想不到的问题。

profile 配置文件

除了application.properties和application.yaml这两种配置,有时后我们需要对不同的环境设置不同的配置,这时候我们要用profile来单独定制某套环境。
比如我们新增一套配置 application-dev.properties

server.port=9007

然后application.properties的配置如下

server.port=9003
spring.profiles.active=dev

重启服务,我们可以看到用的是9007,表示profile的优先级更高!

TomcatWebServer  : Tomcat started on port 9007 (http) with context path '/'

JSON 格式的配置

刚才我们在环境变量中设置的是key-value结构,类似properties
在这里插入图片描述
我们能不能在环境变量中使用json格式呢?答案当然是可以
在这里插入图片描述

默认加载路径

我们都知道,SpringBoot会在resources目录下找application.properties, 这是它的默认行为。其实它还会项目根目录下的config文件夹,也是它默认的搜索路径。
我们测试一下
resources/application.properties

server.port=9003
spring.profiles.active=dev

然后在根目录下的config/application-dev.properties

server.port=9007

启动应用,发现用的是9007。这也验证了config目录也是默认的加载路径。

如果你不喜欢application.properties,你也可以修改主配置文件名。
在这里插入图片描述
resources/hello.properties

server.port=9003
spring.profiles.active=dev

config/hello-dev.properties

server.port=9010

不过一般没人吃饱饭了去这么干!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2328197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【youcans论文精读】弱监督深度检测网络(Weakly Supervised Deep Detection Networks)

欢迎关注『youcans论文精读』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans论文精读】弱监督深度检测网络 WSDDN 0. 弱监督检测的开山之作0.1 论文简介0.2 WSDNN 的步骤0.3 摘要 1. 引言2. 相关工作3. 方法3.1 预训练网络3.2 弱监督深度检测网络3.3 WSDDN训练3.4 空间…

【服务日志链路追踪】

MDCInheritableThreadLocal和spring cloud sleuth 在微服务架构中,日志链路追踪(Logback Distributed Tracing) 是一个关键需求,主要用于跟踪请求在不同服务间的调用链路,便于排查问题。常见的实现方案有两种&#x…

【行测】判断推理:图形推理

> 作者:დ旧言~ > 座右铭:读不在三更五鼓,功只怕一曝十寒。 > 目标:掌握 图形推理 基本题型,并能运用到例题中。 > 毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安! …

3D模型给可视化大屏带来了哪些创新,都涉及到哪些技术栈。

一、3D 模型给可视化大屏带来的创新 更直观的视觉体验 传统的可视化大屏主要以二维图表和图形的形式展示数据,虽然能够传达一定的信息,但对于复杂的场景和数据关系,往往难以直观地呈现。而 3D 模型可以将数据以三维立体的形式展示出来&#…

Unity HDRP管线用ShaderGraph还原Lit,方便做拓展;

里面唯一的重点就是判断有无这张复合图,我用的是颜色判断: float Tex TexCol.r*TexCol.g*TexCol.b*TexCol.a; if(Tex 1) { IsOrNot 1; } else { IsOrNot 0; } 其他的正常解码就行,对了法线贴图孔位记得设置成normal,不然的话…

绝缘升级 安全无忧 金能电力环保绝缘胶垫打造电力安全防护新标杆

在电力安全领域,一块看似普通的胶垫,却是守护工作人员生命安全的“第一道防线”。近年来,随着电网设备升级和环保要求趋严,传统绝缘胶垫有异味、易老化、绝缘性能不足等问题逐渐暴露。为此,金能电力凭借技术创新推出新…

Linux命令-iotop

iotop 命令 iotop 是一个用于实时监控磁盘 I/O 活动的工具,可以显示哪些进程正在使用磁盘资源。 参数 描述 –version 显示程序版本号并退出 -h, --help 显示此帮助消息并退出 -o, --only 仅显示实际进行 I/O 操作的进程或线程 -b, --batch 非交互模式,适…

QTableWidget 中insertRow(0)(头插)和 insertRow(rowCount())(尾插)的性能差异

一、目的 在 Qt 的 QTableWidget 中,insertRow(0) (头插)和 insertRow(rowCount())(尾插)在性能上存在显著差异。 二、QAbstractItemModel:: insertRows 原文解释 QAbstractItemModel Class | Qt Core 5.15.18 AI 解…

【万字总结】前端全方位性能优化指南(完结篇)——自适应优化系统、遗传算法调参、Service Worker智能降级方案

前言 自适应进化宣言 当监控网络精准定位病灶,真正的挑战浮出水面:系统能否像生物般自主进化? 五维感知——通过设备传感器实时捕获环境指纹(如地铁隧道弱光环境自动切换省电渲染) 基因调参——150个性能参数在遗传算…

不绕弯地解决文件编码问题,锟斤拷烫烫烫

安装python对应库 pip install chardet 检测文件编码 import chardet# 检测文件编码 file_path rC:\Users\AA\Desktop\log.log # 这里放文件和文件绝对路径 with open(file_path, rb) as f:raw_data f.read(100000) # 读取前10000个字节result chardet.detect(raw_data)e…

高密度任务下的挑战与破局:数字样机助力火箭发射提效提质

2025年4月1日12时,在酒泉卫星发射中心,长征二号丁运载火箭顺利升空,成功将一颗卫星互联网技术试验卫星送入预定轨道,发射任务圆满完成。这是长征二号丁火箭的第97次发射,也是长征系列火箭的第567次发射。 执行本次任务…

QT Quick(C++)跨平台应用程序项目实战教程 6 — 弹出框

目录 1. Popup组件介绍 2. 使用 上一章内容完成了音乐播放器程序的基本界面框架设计。本小节完成一个简单的功能。单击该播放器顶部菜单栏的“关于”按钮,弹出该程序的相关版本信息。我们将使用Qt Quick的Popup组件来实现。 1. Popup组件介绍 Qt 中的 Popup 组件…

KisFlow-Golang流式实时计算案例(四)-KisFlow在消息队列MQ中的应用

Golang框架实战-KisFlow流式计算框架专栏 Golang框架实战-KisFlow流式计算框架(1)-概述 Golang框架实战-KisFlow流式计算框架(2)-项目构建/基础模块-(上) Golang框架实战-KisFlow流式计算框架(3)-项目构建/基础模块-(下) Golang框架实战-KisFlow流式计算框架(4)-数据流 Golang框…

leetcode:1582. 二进制矩阵中的特殊位置(python3解法)

难度:简单 给定一个 m x n 的二进制矩阵 mat,返回矩阵 mat 中特殊位置的数量。 如果位置 (i, j) 满足 mat[i][j] 1 并且行 i 与列 j 中的所有其他元素都是 0(行和列的下标从 0 开始计数),那么它被称为 特殊 位置。 示…

Cline – OpenRouter 排名第一的CLI 和 编辑器 的 AI 助手

Cline – OpenRouter 排名第一的CLI 和 编辑器 的 AI 助手,Cline 官网:https://github.com/cline/cline Star 37.8k ps,OpenRouter的网址是:OpenRouter ,这个排名第一,据我观察,是DeepSeek v3…

Mock.js虚拟接口

Vue3中使用Mock.js虚拟接口数据 一、创建项目 pnpm创建vite的项目,通过 PNPM来简化依赖管理。若还没有安装 PNPM,可以通过 npm来安装: 安装 PNPM npm install -g pnpm//使用国内镜像加速pnpm add -g pnpmlatestpnpm config set registry http://regis…

LoRa模块通信距离优化:如何实现低功耗覆盖30公里无线传输要求

在物联网(IoT)快速发展的今天,LoRa(Long Range)技术作为一种基于扩频调制的远距离无线通信技术,因其远距离通信、低功耗和强抗干扰能力等优势,在农业监测、城市智能管理、环境监测等多个领域得到…

OpenCV 从入门到精通(day_05)

1. 模板匹配 1.1 什么是模板匹配 模板匹配就是用模板图(通常是一个小图)在目标图像(通常是一个比模板图大的图片)中不断的滑动比较,通过某种比较方法来判断是否匹配成功。 1.2 匹配方法 rescv2.matchTemplate(image, …

OpenRouter开源的AI大模型路由工具,统一API调用

简介 ‌OpenRouter是一个开源的路由工具‌,它可以绕过限制调用GPT、Claude等国外模型。以下是对它的详细介绍: 一、主要功能 OpenRouter专注于将用户请求智能路由到不同的AI模型,并提供统一的访问接口。它就像一个“路由器”,能…

zabbix监控网站(nginx、redis、mysql)

目录 前提准备: zabbix-server主机配置: 1. 安装数据库 nginx主机配置: 1. 安装nginx redis主机配置: 1. 安装redis mysql主机配置: 1. 安装数据库 zabbix-server: 1. 安装zabbix 2. 编辑配置文…