SpringBoot基础(二):配置文件详解
SpringBoot基础系列文章
SpringBoot基础(一):快速入门
SpringBoot基础(二):配置文件详解
目录
- 一、配置文件分类
- 二、配置文件优先级
- 1、不同版本优先级
- 2、不同位置优先级
- 三、配置文件格式
- 1、yml和yaml格式
- 1.1、字符串
- 1.2、布尔类型
- 1.3、整数型
- 1.4、浮点型
- 1.5、空(Null)
- 1.6、时间类型
- 1.7、对象(属性和值)、Map(键值对)
- 1.8、数组、list、set
- 1.9、对象数组、对象list、对象set
- 2、properties格式
- 四、临时属性设置
- 1、临时属性
- 2、自定义配置文件
- 五、配置文件数据读取
- 1、读取单一数据
- 2、读取全部数据
- 3、读取对象数据
- 4、配置文件内的数据引用
- 六、多环境开发
- 1、yml单一文件版
- 2、yml多文件版
- 3、yml独立配置多文件版
一、配置文件分类
SpringBoot提供了3种配置文件的格式
- application.properties(传统格式/默认格式)
server.port=81
- application.yml(主流格式)
server:port: 82
- application.yaml
server:port: 83
yml格式和yaml格式除了文件名后缀不一样,格式完全一样
二、配置文件优先级
1、不同版本优先级
- springboot
2.4.0及以后版本:application.yaml ➡️ application.yml ➡️ application.properties - springboot
2.4.0以前版本:application.properties ➡️ application.yml ➡️ application.yaml - 旧版application.properties优先级最高,新版优先级最低
- 不同配置文件中相同配置高优先级
覆盖低优先级,不同配置文件中不同配置全部保留
2、不同位置优先级
- classpath:application.yml
(resources目录)【最低-程序员】 - classpath:config/application.yml
(resources目录下的config目录)【项目经理】 - file :application.yml
(jar包所在目录)【运维】 - file :config/application.yml
(jar包所在目录下config目录)【最高-运维经理】
三、配置文件格式
1、yml和yaml格式
- 大小写敏感
- 使用缩进表示层级关系,只允许使用
空格(不允许使用Tab键)- 缩进的
空格数量不重要,只要相同层级的元素左侧对齐即可 - 属性名与属性值之间使用
冒号+空格作为分隔
- 缩进的
- #号 表示注释
- 可使用
-代替驼峰,如Java中的lastName,在yml中lastName或last-name都可正确映射
1.1、字符串
- 字符串可不用加单引号或双引号
单引号不会转义【\n 则为普通字符串显示】双引号会转义【\n会显示为换行符】- 字符串可以拆成多行,换行符会被转化成一个
空格 |开头,大文本写在下层,保留文本格式,换行符正确显示
str1: 哈喽
str2: 哈喽 你好呀
str3: '哈喽 \n 你好'
str4: "哈喽 \n 你好"
str5: |哈喽你好# 转为json样式如下
{"str1":"哈喽","str2":"哈喽 你好 呀","str3":"哈喽 \\n 你好","str4":"哈喽 \n 你好","str5":"哈喽\n 你好"}
1.2、布尔类型
true、yes、on皆为真,不区分每个字母大小写false、no、off皆为假,不区分每个字母大小写
flag1: true
flag2: False
flag3: yes
flag4: NO
# 转为json样式如下
{"flag1":true,"flag2":false,"flag3":true,"flag4":false}
- 如果出现大写字母会提示异常,不过不影响

1.3、整数型
- 支持二进制、八进制、十六进制
num1: 666
num2: 0001_0000 # 支持二进制、八进制、十六进制# 转为json样式如下
{"num1":666,"num2":4096}
1.4、浮点型
- 支持科学计数法
f1: 1.1
f2: 1.1e-2 # 使用科学计数法# 转为json样式如下
{"f1":1.1,"f2":0.011}
1.5、空(Null)
null、Null和~都是空,不指定值默认也是空
str6: null
str7: Null
str8: ~
str9:# 转为json样式如下
{"str6":"","str7":"","str8":"","str9":""}
1.6、时间类型
java.util.Date类型
# date1: 2020-05-26 这样写会抛异常
date1: 2020/05/26
date2: 2020/05/26 01:00:00# 转为json样式如下
{"date1":1590422400000,"date3":1590426000000}
1.7、对象(属性和值)、Map(键值对)
- java对象对应的yml设置属性

person:name: 张三age: 30# Map格式方式一map1:k1: v1k2: v2# Map格式方式二map2: { key1: value1, key2: value2 }# 转为json样式如下
{"age":30,"map1":{"k1":"v1","k2":"v2"},"map2":{"key1":"value1","key2":"value2"},"name":"张三"}
1.8、数组、list、set

person:#数组格式一subject:- Java- 前端- 大数据#数组格式二likes: [王者荣耀,刺激战场]# 转为json样式如下
{"likes":["王者荣耀","刺激战场"],"subject":["Java","前端","大数据"]}
1.9、对象数组、对象list、对象set

person:# 对象数组格式一pet1:- type: dogage: 1- type: catage: 2# 对象数组格式一pet2:- type: dogage: 1-type: catage: 2# 对象数组格式一pet3: [{type: dog, age: 1}, {type: cat, age: 2}]# 转为json样式如下
{"pet1":[{"age":1,"type":"dog"},{"age":2,"type":"cat"}],"pet2":[{"age":1,"type":"dog"},{"age":2,"type":"cat"}],"pet3":[{"age":1,"type":"dog"},{"age":2,"type":"cat"}]
}
2、properties格式

person.name=李四
person.age=18
person.flag1=false
person.date1=2019/01/01# map格式一
person.map1.key1=value1
person.map1.key2=value2
# map格式二
person.map2[k1]=v1
person.map2[k2]=v2# 数组格式一
person.subject[0]=java
person.subject[1]=python
person.subject[2]=c++
# 数组格式二
person.likes=唱,跳,rap# 数组对象格式
person.pet1[0].type=cat
person.pet1[0].age=1
person.pet1[1].type=dog
person.pet1[1].age=2# 转为json样式如下
{"age":18,"date1":1546272000000,"flag1":false,"likes":["唱","跳","rap"],"map1":{"key1":"value1","key2":"value2"},"map2":{"k1":"v1","k2":"v2"},"name":"李四","pet1":[{"age":1,"type":"cat"},{"age":2,"type":"dog"}],"subject":["java","python","c++"]
}
四、临时属性设置
1、临时属性
- 临时属性添加方式:java -jar 工程名.jar --属性名=值
- 多个临时属性之间使用空格分隔
java –jar springboot.jar --server.port=80 --logging.level.root=debug
- 临时属性的加载优先级要高于配置文件的
- idea中
Program arguments(程序参数)或VM options (虚拟机参数)就是添加临时属性的

- 虚拟机参数一般用来设置
系统属性(不常用) - 程序参数一般用来设置
应用程序选项或参数(常用) - –server.port 选项应该在 java -jar 命令之后使用,而 -Dserver.port 选项应该在 -jar 命令前使用
# 以应用参数的方式
java -jar my.jar --server.port=7788# 或以 JDK 参数的方式
java -Dserver.port=7788 -jar my.jar
2、自定义配置文件
- 方式一:使用临时属性设置配置
文件名,注意仅仅是名称,不要带扩展名
--spring.config.name=myApplication
- 方式二:使用临时属性设置配置
文件路径或类路径,全路径名
--spring.config.location=classpath:/myApplication.yml
五、配置文件数据读取
1、读取单一数据
- 使用
@Value可以读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
@RestController
public class ReadConfigFile {@Value("${server.port}")private String myPort;@RequestMapping("/getValue")public String getValue(){System.out.println(myPort);//8080return "success";}
}
2、读取全部数据
- SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做
Environment,使用getProperty方法获取
@RestController
public class HelloController {@Autowiredprivate Environment environment;@GetMapping("/hello")public String hello(){String personName = environment.getProperty("person.name");String petType = environment.getProperty("person.pet1[0].type");return "Hello,Spring Boot !";}
}
3、读取对象数据
- 使用
@ConfigurationProperties注解绑定配置信息到封装类中 - 封装类需要定义为Spring管理的bean,否则无法进行属性注入
yml配置文件
person:name: zhang3age: 30pets:- type: dogage: 1- type: catage: 2map:k1: v1k2: v2
属性注入的实体,使用时候直接@Autowired注入即可
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String name;private Integer age;private List<Pets> pets;private Map<String,String> map;
}@Data
class Pets {private String type;private Integer age;
}
- 添加如下依赖,yml属性可以提示@ConfigurationProperties对应的实体的字段属性
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>
4、配置文件内的数据引用
- 如文件属性内都具有
相同的前缀
center:dataDir: /usr/local/fire/datatmpDir: /usr/local/fire/tmplogDir: /usr/local/fire/logmsgDir: /usr/local/fire/msgDir
- 可以使用引用格式来定义数据,其实就是搞了个变量名,然后
引用变量
baseDir: /usr/local/fire
center:dataDir: ${baseDir}/datatmpDir: ${baseDir}/tmplogDir: ${baseDir}/logmsgDir: ${baseDir}/msgDir
六、多环境开发
1、yml单一文件版
springboot 2.4.0以前版本
spring:profiles:active: dev #激活dev环境配置
---
spring:profiles: pro
server:port: 80
---
spring:profiles: dev
server:port: 81
---
spring:profiles: test
server:port: 82
springboot 2.4.0及以后的版本
spring.profiles为过时属性配置,不过也能使用- 替换属性为
spring.config.activate.on-profile
spring:profiles:active: dev #激活dev环境配置
---
spring:config:activate:on-profile: pro
server:port: 80
---
spring:config:activate:on-profile: dev
server:port: 81
---
spring:config:activate:on-profile: test
server:port: 82
2、yml多文件版
application.yml主配置文件
spring:profiles:active: pro #激活pro环境
#其他公共属性
...
application-pro.yml生产环境配置文件
server:port: 81
application-dev.yml开发环境配置文件
server:port: 82
- 文件的命名规则为:application-环境名.yml
- 主配置文件中设置公共配置(全局)
- 环境分类配置文件中常用于设置冲突属性(局部)
- 主配置文件属性和环境分类配置文件属性冲突,
后者优先级高
3、yml独立配置多文件版
- 将所有的配置
根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,命名规则如下- application-devDB.yml
- application-devRedis.yml
- application-devMVC.yml
SpringBoot2.4.0以前版本
- 使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔
spring:profiles:active: devinclude: devDB,devRedis,devMVC
- 相当于加载dev配置时,再加载对应的3组配置
- 主环境最后加载
- 当主环境dev与其他环境有相同属性时,主环境属性生效
- 其他环境中有相同属性时,最后加载的环境属性生效
- 如下展示加载顺序,最后加载的优先级最高(因为覆盖了相同的属性)

SpringBoot2.4.0及以后版本
- 比如我要切换dev环境为pro时,include也要修改。因为include属性只能使用一次
- SpringBoot从2.4版开始使用
group属性替代include属性,降低了配置书写量
spring:profiles:active: devgroup:"dev": devDB,devRedis,devMVC"pro": proDB,proRedis,proMVC"test": testDB,testRedis,testMVC
- 主环境最先加载
- 环境中有相同属性时,最后加载的环境属性生效
- 如下展示加载顺序,dev在第一位,相同属性会被覆盖

总之:配置文件后加载的会覆盖先加载的配置文件属性内容
相关文章:
SpringBoot基础(二):配置文件详解
SpringBoot基础系列文章 SpringBoot基础(一):快速入门 SpringBoot基础(二):配置文件详解 目录 一、配置文件分类二、配置文件优先级1、不同版本优先级2、不同位置优先级 三、配置文件格式1、yml和yaml格式1.1、字符串1.2、布尔类型1.3、整数型1.4、浮点…...
Web安全(一)-靶场搭建过程-基于docker
今天来复习一下web方面的知识 1.1 sqliab环境搭建 基于Centos 和Docker 1.1.1 Vmware环境安装 这个就略去了吧 博主使用的是vmware17pro 具体的密钥什么的大家懂的都懂 这里就不提供了 接下来 将带大家安装centos7的镜像 为了方便操作 这里选择 centos7_minimal 地址如下:…...
【JavaEE】单例模式和阻塞队列
🔥个人主页: 中草药 🔥专栏:【Java】登神长阶 史诗般的Java成神之路 🕯️一.设计模式 在Java中,设计模式(Design Patterns)是指在软件工程和面向对象编程中,针对特定…...
RCE绕过技巧
目录 EVAL长度限制突破技巧 1.使用反引号 2.file_put_contents写入文件 3.php5.6变长参数usort回调后门 命令长度限制突破技巧 1.拼接文件名 无字母数字的webshell命令执行 1.取反码 2.上传临时文件 EVAL长度限制突破技巧 分析代码:首先传递一个param参数&…...
Spring源码解析(31)之事务配置文件解析以及核心对象创建过程
一、前言 首先我们先准备一下spring 事务的配置文件,具体内容如下: <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/20…...
win11安装docker报错记录
报错一: Docker Desktop - Unexpected WSL error An unexpected error occurred while executing a WSL command. Either shut down WSL down with wsl --shutdown, and/or reboot your machine. You can also try reinstalling WSL and/or Docker Desktop. If t…...
【vulnhub】CLAMP 1.0.1靶机
信息收集 靶机发现 端口扫描 页面访问,并查看源码 访问 /nt4stopc/,下面有一些问题,提示必须收集答案 一些判断题,对与错对应1与0,最后结果为0110111001,拼接访问 点击图中位置,发现存在参数,p…...
GPS跟踪环路MATLAB之——数字锁相环
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 GPS跟踪环路MATLAB之——数字锁相环 前言为什么要锁相环科斯塔斯环锁相环的一些基本概念1、捕获、锁定与跟踪的概念2、捕获时间和稳态相差3、相位捕获和频率捕获4、捕获带和同…...
docker开发环境搭建-关于数据库的IP是什么
故事的背景是这样的: 我在本地的ubuntu系统上安装了docker,并创建了一个mysql容器,但是在使用DBeaver连接该数据库时,需要填写数据库的ip,填写127.0.0.1,工具提示找不到这个库,然后使用ip addr…...
loginApi
import request from "/utils/request"; import { AxiosPromise } from "axios"; import { CaptchaResult, LoginData, LoginResult } from "./types";/*** 登录API** param data {LoginData}* returns*/ export function loginApi(data: LoginD…...
【RAG检索增强生成】Ollama+AnythingLLM本地搭建RAG大模型私有知识库
目录 前言一、Ollama:革新性的本地LLM服务工具1.核心优势2.技术亮点 二、AnythingLLM 概览1.核心特性2.技术生态支持 三、搭建本地智能知识库1. Ollama的安装启航2. AnythingLLM的安装对接3. AnythingLLM的配置精调4. 工作区与文档管理5. 聊天与检索的智能交互 四、…...
【wiki知识库】08.添加用户登录功能--前端Vue部分修改
🍊 编程有易不绕弯,成长之路不孤单! 目录 🍊 编程有易不绕弯,成长之路不孤单! 一、今日目标 二、前端Vue模块的修改 2.1 the-header组件 2.2 store工具 2.3 router路由配置修改 一、今日目标 上篇文章…...
写给非机器学习人员的 embedding 入门
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
Oracle【plsql编写九九乘法表】
九九乘法表 DECLAREi NUMBER : 1;j NUMBER : 1; BEGINFOR i IN 1 .. 9LOOPFOR j IN 1 .. iLOOPDBMS_OUTPUT.put (i || * || j || || i * j || );END LOOP;DBMS_OUTPUT.put_line ( );END LOOP; END;输出结果...
ansible安装K8s
部署Kubernetes (k8s) 集群使用Ansible是一个常见的自动化解决方案。下面我将提供一个基本的步骤概述和所需的命令,用于在CentOS 7.8上使用Ansible部署k8s集群,包括Master节点和Worker节点(Web和DB节点)。 步骤 1: 准备环境 确保所…...
restful传值
GetMapping 普通的get请求 后端: restfule的get请求 通过/asd/123这种方式get请求传入后端 前端 url: /system/role/deptTree/ roleId / tenantId, method: get后端PathVariable从path上取对应的值 通过 GetMapping(value "/deptTree/{roleId}/{tenan…...
Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐
效果如下: 图片随便找的,可能需要调下样式,代码复制可用,留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…...
硅步千里:如何入行?——之入行成为软件开发者
无论何时,你是否有遇到这样的场景(在自己从未涉足过的行业或领域,现在需要自己去这个行业或领域学习探索,最初的目标是熟悉行业,快速融入进去,很多时候,我们只是了解了个大概,并没能…...
Sandbox: rsync.samba(80134) deny(1) file-write-create
Xcode15运行报错:Sandbox: rsync.samba(80134) deny(1) file-write-create/xxx/xxx 如下图: 解决办法: Build Settings 搜索 sandbox,把 Build Options 中的 User Script Sandboxing改为 NO...
lvs的dr模式综合实践
目录 编辑虚拟机准备工作 编辑编辑编辑 配置过程 配置client主机 配置router主机 配置lvs主机(vip使用环回来创建) 配置server1主机(vip使用环回来创建) 配置server2主机(vip使用环回来创建࿰…...
SenseVoice实战:搭建智能客服语音质检系统,自动检测咳嗽清嗓等事件
SenseVoice实战:搭建智能客服语音质检系统,自动检测咳嗽清嗓等事件 在客服中心的质量检查工作中,质检人员每天需要监听大量通话录音,手动标记出咳嗽、清嗓等非语音事件。传统人工质检方式不仅效率低下,而且容易因疲劳…...
YOLO26改进 - 注意力机制 | Polarized Self-Attention 极化自注意力:高分辨率保持机制优化细节表征,助力小目标检测
前言 本文介绍了极化自注意力(PSA)模块及其在YOLO26中的结合应用。PSA模块旨在解决细粒度计算机视觉任务中的像素级回归问题,其融合了极化过滤和增强两个关键设计。极化过滤在通道和空间维度保持高分辨率,减少信息损失;增强采用细粒度回归输出分布的非线性函数。我们将Po…...
5分钟掌握Sketch MeaXure:让设计标注变得简单高效的终极指南
5分钟掌握Sketch MeaXure:让设计标注变得简单高效的终极指南 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 你是否厌倦了在设计和开发之间反复沟通尺寸和颜色值?Sketch MeaXure插件正是解决这一…...
数学公式也能懂:gte-base-zh与MathType内容协同处理方案
数学公式也能懂:gte-base-zh与MathType内容协同处理方案 你有没有遇到过这样的烦恼?面对一份满是复杂数学公式和文字说明的学术论文或技术文档,想快速找到某个特定公式的推导过程,或者想检索所有提到“傅里叶变换”的地方&#x…...
基于Ubuntu20.04的SenseVoice-Small高性能部署方案
基于Ubuntu20.04的SenseVoice-Small高性能部署方案 语音识别技术正逐渐成为人机交互的重要桥梁,而如何在生产环境中高效部署模型成为很多开发者的实际需求。本文将手把手带你完成SenseVoice-Small在Ubuntu20.04系统上的高性能部署。 1. 环境准备与系统优化 在开始部…...
Wan2.2-I2V-A14B实操手册:WebUI中ControlNet风格控制与运动强度调节
Wan2.2-I2V-A14B实操手册:WebUI中ControlNet风格控制与运动强度调节 1. 环境准备与快速部署 在开始探索Wan2.2-I2V-A14B的强大功能前,我们需要确保环境已正确部署。本镜像已针对RTX 4090D 24GB显卡进行深度优化,开箱即用。 1.1 一键启动We…...
SEO_从零开始,手把手教你制定SEO执行计划
SEO: 从零开始,手把手教你制定SEO执行计划 在当今数字化时代,网站的SEO(搜索引擎优化)是提高网站流量、吸引目标用户的关键。如果你是一个从零开始的SEO爱好者,可能会觉得这个领域有点复杂。不过,别担心&a…...
保姆级教程:用OpenCV+Wireshark搞定海康萤石摄像头RTSP视频流(附常见品牌地址格式)
从零破解:OpenCVWireshark实战解析主流安防摄像头RTSP协议 当你面对一台陌生的网络摄像头,既不知道IP地址也不清楚RTSP流格式时,那种无从下手的挫败感我深有体会。去年在帮朋友搭建智能监控系统时,我花了整整三天时间才搞明白不同…...
FISCO BCOS 2.0 安装部署WeBASE与区块链浏览器
FISCO BCOS 2.0 安装部署WeBASE与区块链浏览器-对应的官网地址: WeBASE平台:https://webasedoc.readthedocs.io/zh-cn/latest/docs/WeBASE/install.html 区块链浏览器:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/br…...
高效系统维护:解决Windows性能问题的Dism++全面指南
高效系统维护:解决Windows性能问题的Dism全面指南 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language Dism是一款功能强大的Windows系统维护工具&#x…...
