Spring Boot中配置文件介绍及其使用教程
目录
一、配置文件介绍
二、配置简单数据
三、配置对象数据
四、配置集合数据
五、读取配置文件数据
六、占位符的使用
一、配置文件介绍
SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.properties或者application.yml或者application.yaml进行配置。SpringBoot默认会从resources目录下加载application.properties或application.yml文件。其中,application.properties文件是键值对类型的文件,之前一直在使用,所以我们不再对properties文件进行阐述。
如果我们想要查找配置文件如何覆盖SpringBoot项目的默认配置,那么可以查看下面链接:
Spring Boot Reference Documentation
https://docs.spring.io/spring-boot/docs/2.7.6/reference/htmlsingle/#appendix.application-properties.server 除了properties文件外,SpringBoot还支持YAML文件进行配置。YAML文件的扩展名为 .yml 或 .yaml ,它的基本要求如下:
- 大小写敏感
- 使用缩进代表层级关系
- 相同的部分只出现一次
比如使用properties文件配置tomcat端口:
server.port=8888
而使用YAML文件配置tomcat端口:
server:
port: 8888
二、配置简单数据
除了覆盖默认配置,我们还可以在YAML文件中配置其他信息以便我们在项目中使用。配置简单数据的方式如下:
语法:
数据名: 值
示例:
name: LYL
注意:value之前有一个空格
三、配置对象数据
语法:
对象:
属性名1: 属性值
属性名2: 属性值
# 或者
对象: {属性名1: 属性值,属性名2: 属性值}
示例:
student:
age: 10
female: male
address: Guangzhou
# 学生2
student2: {sex: male,age: 10,address: Guangzhou}
注意:属性名前面的空格个数不限,在yml语法中,相同缩进代表同一个级别,只要每个属性前的空格数一样即可。
四、配置集合数据
语法:
集合:
- 值1
- 值2
# 或者
集合: [值1,值2]
示例:
city1:
- Beijing
- Shanghai
- Shenzhen
- Guangzhou# 集合中元素是对象
students:
- score: 100
name: zhangsan
age: 10
- score: 95
name: lisi
age: 25
- score: 78
name: wangwu
age: 15user:
id: 1001
username: LYL
address:
- Beijing
- Shanghai
- Guangzhou
- Shenzhen
grades:
- subject: math
score: 90
- subject: english
score: 39
五、读取配置文件数据
我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上,用法如下:
yml文件如下:
name: zhangsanstudent:age: 10female: maleaddress: Guangzhoucity1:- Beijing- Shanghai- Shenzhen- Guangzhoustudents:- score: 100name: zhangsanage: 10- score: 95name: lisiage: 25- score: 78name: wangwuage: 15user:id: 1001username: LYLaddress:- Beijing- Shanghai- Guangzhou- Shenzhengrades:- subject: mathscore: 90- subject: englishscore: 39
读取配置文件:
package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class YmlController1 {@Value("${name}")private String name;@Value("${students[1].name}")private String stu_name;@Value("${city1[3]}")private String address;@RequestMapping("/yml1")@ResponseBodypublic String yml1(){System.out.println(name);System.out.println(stu_name);System.out.println(address);return name+" "+stu_name+" "+address;}
}
接下来我们运行一下看看能否获得数据:


OK,控制台和网页端都是可以成功读取数据的。
不过要注意的是:@Value只能映射简单数据类型,不能将yaml文件中的对象、集合映射到属性中。
那我们应该如何映射到实体类呢,通过 @ConfigurationProperties(prefifix="对象") 可以将配置文件中的配置自动与实体进行映射,这样可以将yml文件中配置的对象属性直接映射到Bean当中。
OK,我们来新建一个实体类:Grade,因为User属性中含有该对象:
package com.example.demo.pojo;public class Grade {private String subject;private int score;public Grade(){};public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}@Overridepublic String toString() {return "Grade [ " +"subject='" + subject + '\'' +", score=" + score +" ]";}
}
再来编写一个控制类读取配置文件:
package com.example.demo.controller;import com.example.demo.pojo.Grade;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import java.util.List;@Controller
@ConfigurationProperties(prefix = "user")
public class YmlController2 {private int id;private String username;private List<String> address;private List<Grade> grades;@RequestMapping("/yml2")public void yml2(){System.out.println(id);System.out.println(username);System.out.println(address);System.out.println(grades);}@Overridepublic String toString() {return "YmlController2 [" +"id=" + id +", username='" + username + '\'' +", address=" + address +", grades=" + grades +" ]";}public YmlController2() {}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public List<String> getAddress() {return address;}public void setAddress(List<String> address) {this.address = address;}public List<Grade> getGrades() {return grades;}public void setGrades(List<Grade> grades) {this.grades = grades;}
}
好了,现在我们运行看看能否获得数据:

OK,在控制台中成功打印了说明该注解生效,是可以使用的。
六、占位符的使用
YAML文件中可以使用 ${} 占位符,它有两个作用:
使用配置文件中的值
比如说我们使用自定义的端口,并在页面展示:配置文件如下图

我们再写一个控制器方法
package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class YmlController3 {@Value("${myConfig.serverPort}")private int port;@RequestMapping("yml3")@ResponseBodypublic String getPort(){return "你的自定义端口为:"+port;}
}
运行测试

也可以是可以成功注入的。
使用框架提供的方法
SpringBoot框架提供了一些生成随机数的方法可以在yml文件中使用:
- ${random.value} :生成类似uuid的随机数,没有"-"连接
- ${random.uuid} :生成一个uuid,有短杠连接
- ${random.int} :随机取整型范围内的一个值
- ${random.int(10)}:随机生成一个10以内的数
- ${random.int(100,200)}:随机生成一个100-200 范围以内的数
- ${random.long}:随机取长整型范围内的一个值
- ${random.long(100,200)}:随机生成长整型100-200范围内的一个值
比如说随机生成一个1000-9999的端口:

相关文章:
Spring Boot中配置文件介绍及其使用教程
目录 一、配置文件介绍 二、配置简单数据 三、配置对象数据 四、配置集合数据 五、读取配置文件数据 六、占位符的使用 一、配置文件介绍 SpringBoot项目中,大部分配置都有默认值,但如果想替换默认配置的话,就可以使用application.prop…...
Hobby脚本自动化工具
Hobby脚本自动化工具 功能简介:可以按照指定编排的配置文件,按顺序执行并监听 使用场景:可以用在前期信息收集的步骤上,将一些常见的脚本进行归纳,并编写成配置文档进行自动化处理 优点:可以扩展性强&am…...
Matlab随机数的产生
1、常见分布随机数的产生 1.1 二项分布 在贝努力试验中,某事件A发生的概率为p,重复该实验n次,X表示这n次实验中A发生的次数,则随机变量X服从的概率分布律(概率密度)为 记为 binopdf(x,n,p) p…...
计算机网络 第四章:网络层
一.网络层概述 1.1分组转发和路由选择 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。 如图所示:这些异构型网络如果只是需要各自内部通信,那它们只需要实…...
分享一个docker无法启动的小问题
准备看看docker服务怎么样 [rootlocalhost ~]# docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 这一看就是docker的进程崩了,我们启动下进程 [rootlocalhost ~]# systemctl start docker Faile…...
Linux 安全 - Capabilities机制
文章目录 前言一、简介二、Capabilities list2.1 POSIX-draft defined capabilities2.2 Linux-specific capabilities 三、 Past and current implementation四、Thread capability sets五、File capabilities六、Transformation of capabilities during execve()七、Capabilit…...
分布式搜索引擎es-3
文章目录 数据聚合聚合的种类RestAPI实现聚合 数据聚合 什么是聚合? 聚合可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如…...
Matlab坐标轴标签中文设置宋体
对y坐标输出中文宋体 新罗马字符 x[1,2,3,4,5,6,7]; plot(x) ylabel(\fontname{宋体}\fontsize{20}长度\fontname{Times New Roman}\fontsize{10} (μm))可以灵活设置字体和大小,其图片如下图所示 也可以对全图的文字设置同一个字体 set(gca,FontSize,9,Fontname, Times New…...
做一个贪吃蛇小游戏happy一下
直接Vue上代码 <template><div><div>贪吃蛇</div><canvas id"canvas" width"400" height"400"></canvas></div> </template><script> export default {data() {return {ctx: null,inter…...
opencv形态学-膨胀
opencv形态学-膨胀 膨胀就是取每一个位置结构元邻域内最大值作为该位置的输出灰度值; 膨胀是取邻域内最大值,那么显然膨胀后图像整体亮度会比原先要高,图像中亮的物体尺寸会变大,相反暗的尺寸会减小,甚至是消失 结构元…...
玄子Share 设计模式 GOF 全23种 + 七大设计原则
玄子Share 设计模式 GOF 全23种 七大设计原则 前言: 此文主要内容为 面向对象七大设计原则(OOD Principle)GOF(Gang Of Four)23种设计模式拓展的两个设计模式 简单工厂模式(Simple Factory Pattern&#x…...
单链表操作 C实现
struct LNode { //定义一个节点 int data; //数据域 struct LNode *next; //指针域 }; 0.初始化 typedef sturct LNode{ //定义单链表结点类型 int date ; //每个结点存放一个数据元素struct LNode *next; //指针指向下…...
WordPress主题网站首页添加好看的四格小工具教程
直接到网站根目录创建一个css文件(文件名:sige.css),文件名可自定义(注意文件名一致) <link rel"stylesheet" href"你的网站/sige.css" type"text/css" > 然后在header.php模板最上方添加引入代码 也可自定义HTML里添加css代码最上方写…...
unittest自动化测试框架讲解以及实战
为什么要学习unittest 按照测试阶段来划分,可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,通常指函数或者类,一般是开发完成的。 单元…...
数学建模之Matlab基础操作
作者由于后续课程也要学习Matlab,并且之前也进行了一些数学建模的练习(虽然是论文手),所以花了几天零碎时间学习Matlab的基础操作,特此整理。 基本运算 a55 %加法,同理减法 b2^3 %立方 c5*2 %乘法 x 1; …...
【Nuxt】04 Nuxt2-SEO: sitemap.xml、seo优化、robots.txt
1 SiteMap设置 环境准备 注意生成sitemap依赖于nuxtjs/sitemap,并且需要用axios进行请求,不要使用nuxtjs/axios,不然会报错 sitemap.xml配置 在nuxt.config.js中配置下面的内容 npm install nuxtjs/sitemap npm install axios在static/s…...
VMware VSAN 入门
一、虚拟化的存储 1.1、对于数据中心来说最重要的是数据,而承载数据的设备就是存储设备(Storage) 1.2、物理服务器的本地存储阵列 与 虚拟化服务器的本地存储阵列 对比 1.3、避免单台服务器故障的虚拟化高级特性:vSphere HA技术 …...
【设计模式】备忘录模式
文章目录 1.备忘录模式定义2.备忘录模式的角色3.备忘录模式实现3.1.场景说明3.2.结构类图3.3.代码实现 4.备忘录模式优缺点5.备忘录模式适用场景6.备忘录模式总结 主页传送门:💁 传送 1.备忘录模式定义 备忘录(Memento Pattern)模…...
vue3+elementUiPlus表格导出功能
1.下载需要的组件包 npm install file-saver xlsx 2.页面中导入 import FileSaver from file-saver import * as XLSX from xlsx; 3.页面中的表格加一个id <el-table :data"tableData" ref"multipleTableRef" style"width…...
专题五:优先级队列
"你了解我,最干净的轮廓, 握住小小风车和放肆的梦~" 堆是一个不错的数据结构,而在计算机中,无法表示二叉分支结构,因此我们经常会看到使用线性表来作为堆的存储容器。在接触堆的时候,我们是把它…...
网易云QQ音乐歌词获取终极指南:163MusicLyrics让你轻松拥有完美歌词
网易云QQ音乐歌词获取终极指南:163MusicLyrics让你轻松拥有完美歌词 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为音乐播放器缺少歌词而烦恼…...
3分钟上手Awoo Installer:Switch游戏安装终极指南
3分钟上手Awoo Installer:Switch游戏安装终极指南 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游戏安装烦恼吗…...
35岁程序员的AI转型指南:收藏这3条入局路径,打造不可替代能力!
本文分析了AI时代程序员面临的挑战与机遇,指出35岁程序员真正的危机是缺乏“不可替代”的能力。文章提出了AI时代程序员的3条入局路径:AI原有技术栈、AI工程化方向、AI垂直行业,并强调了实践和项目的重要性,避免技术自嗨和只学不做…...
利用 AsyncOpenAI 与 asyncio.gather 实现批量问题的高效并发处理
1. 为什么需要异步处理批量问题? 想象一下你开了一家奶茶店,顾客排着长队点单。如果每次只服务一个顾客,等做完他的奶茶才接待下一位,队伍会越排越长。这就是同步请求的困境——每个查询必须等待前一个完成才能开始。当我们需要同…...
Adobe-GenP 3.0终极指南:5分钟快速免费激活Adobe全系列软件
Adobe-GenP 3.0终极指南:5分钟快速免费激活Adobe全系列软件 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP是一款革命性的Adobe Creative Cl…...
告别Xshell:免费利器FinalShell的Linux远程连接与高效运维实战
1. 为什么选择FinalShell替代Xshell? 作为长期使用Xshell的老用户,我完全理解大家对这款经典SSH客户端的依赖。但最近两年,我逐渐将团队的所有运维工作迁移到了FinalShell。这个决定不仅帮我们省下了每年数千元的软件授权费用,更重…...
5分钟精通英雄联盟信息修改:LeaguePrank新手完全使用指南
5分钟精通英雄联盟信息修改:LeaguePrank新手完全使用指南 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 你是否曾在英雄联盟中羡慕别人的华丽段位边框,却苦于自己的段位不够理想?你是否想要…...
通俗易懂的C++前缀和与差分算法图文示例详解
1、前缀和 前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。 2、前缀和算法有什么好处? 先来了解这样一个问题:…...
Jupyter Notebook 云GPU配置全解析(含实操+选型指南)
一、前言:为什么需要Jupyter Notebook云GPU配置?Jupyter Notebook作为交互式编程工具,广泛应用于AI训练、数据建模、算法调试等场景,其“代码文本”一体化特性,大幅提升开发效率。但本地环境存在明显局限:普…...
CANopen设备配置不求人:手把手教你用Python-canopen库读写EDS/DCF文件
CANopen设备配置实战指南:用Python-canopen库深度操作EDS/DCF文件 在工业自动化领域,CANopen协议因其开放性和灵活性成为设备互联的重要标准。而对象字典(Object Dictionary)作为CANopen设备的核心配置数据库,直接决定了设备的通信行为和功能…...
