【JavaEE进阶】Spring Boot配置文件
欢迎关注个人主页:逸狼
创造不易,可以点点赞吗
如有错误,欢迎指出~
目录
SpringBoot配置⽂件
举例: 通过配置文件修改端口号
配置⽂件的格式
properties基本语法
读取配置⽂件
properties配置文件的缺点
yml配置⽂件
yml基本语法
yml和properties连接数据库的配置对⽐
yml的使用
yml配置读取
配置对象
读取yml配置文件中的对象
配置集合
读取yml配置文件中的集合
配置Map
编辑 yml优缺点
验证码案例
需求
约定前后端交互接⼝
接⼝定义
1. ⽣成验证码
2. 校验验证码是否正确
Hutool⼯具介绍
yml文件配置项
验证码配置项对应的Java对象
后端代码实现
前端代码实现
index.html
success.html
测试
总结
配置⽂件主要是为了解决硬编码带来的问题,把可能会发⽣改变的信息,放在⼀个集中的地⽅,当我们启 动某个程序时,应⽤程序从配置⽂件中读取数据,并加载运⾏.
硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中,也就是我们常说的"代码写死"
使⽤配置⽂件,可以使程序完成⽤⼾和应⽤程序的交互,或者应⽤程序与其他应⽤程序的交互
SpringBoot配置⽂件
SpringBoot⽀持并定义了配置⽂件的格式,也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的 ⽬的.
很多项⽬或者框架的配置信息也放在配置⽂件中,⽐如:
• 项⽬的启动端⼝
• 数据库的连接信息(包含⽤⼾名和密码的设置)
• 第三⽅系统的调⽤密钥等信息
• ⽤于发现和定位问题的普通⽇志和异常⽇志等.
举例: 通过配置文件修改端口号
Tocmat默认端⼝号是8080,所以我们程序访问时的端⼝号也是8080 但是如果8080端⼝号已经被其他进程使⽤,我们可以通过配置⽂件来修改服务的端⼝号 SpringBoot在创建项⽬时,就已经帮我们创建了配置⽂件

修改 application.properties ⽂件 加上server.port=9090

![]()
配置⽂件的格式
SpringBoot配置⽂件有以下三种:
- application.properties
- application.yml
- application.yaml
yml为yaml的简写,实际开发中出现频率最⾼.yaml和yml的使⽤⽅式⼀样,当应⽤程序启动时,SpringBoot会⾃动从classpath路径找到并加载 application.properties 和application.yaml 或者application.yml ⽂件.
- 理论上讲.properties 和.yml 可以并存在于⼀个项⽬中,当.properties 和.yml 并存时,两个配置都会加载.如果配置⽂件内容有冲突,则以.properties 为主,也就是 .properties 优先级更⾼.(properties配置⽂件是最早期的配置⽂件格式,也是创建SpringBoot项⽬默认的配置⽂件 )
- 虽然理论上来讲.properties 可以和.yml 共存,但实际的业务当中,我们通常会采取⼀种 统⼀的配置⽂件格式,这样可以更好的维护(降低故障率).
properties基本语法
properties是以键值的形式配置的,key和value之间是以"="连接的,如: # 配置项⽬端⼝号 server.port=8080
配置⽂件中使⽤“#”来添加注释信息。
读取配置⽂件
如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤@Value 注解来实现。 @Value 注解使⽤" ${} "的格式读取,如下代码所⽰:
properties配置如下:
m.k=do
package com.example.demo;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
//@RequestMapping("/p1")
public class PropertiesController {@Value("${m.k}")private String k;@RequestMapping("/v1")public String key(String input){//参数名 input 与成员变量 k 同名,否则可能会读取失败System.out.println("注入后的key值为: " + k);if (k == null) {System.out.println("key的值为null");}return "读取到properties文件中的k的值: "+ k;}
}

properties配置文件的缺点
properties配置⽂件中会有很多的冗余的信息,⽐如

yml配置文件可以解决以上问题
yml配置⽂件
yml是YAML是缩写,它的全称YetAnotherMarkupLanguage翻译成中⽂就是“另⼀种标记语⾔.
yml基本语法
yml是树形结构的配置⽂件,它的基础语法是"key:value". key和value之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略

正确配置 会有高亮提示
yml和properties连接数据库的配置对⽐

yml的使用
# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null,~代表null
null.value: ~
# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''
yml配置读取
yml读取配置的⽅式和properties相同,使⽤@Value注解即可,实现代码如下:
@Value("${code.java}")private String java;@RequestMapping("/v2")public String v2(){return "读取yml配置文件code.java的值: "+ java;}

注意事项:value值加单双引号 字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。
尝试在application.yml中配置如下信息:
String:str1: hello \n ymlstr2: 'hello \n yml'str3: "hello \n yml"
@RequestMapping("/v3")public String v3(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "yml";}

从上述结果可以看出:
- • 字符串默认不⽤加上单引号或者双引号。
- • 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串.
- • 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义.
配置对象
我们还可以在yml中配置对象,如下配置:以下两者写法都行
Student:id: 1name: zhangsanage: 21
Student2: {id: 2, name: lisi, age: 18}
读取yml配置文件中的对象
这个时候就不能⽤@Value来读取配置中的对象了,此时要使⽤另⼀个注解@ConfigurationProperties (prefix = "对应的是配置文件中的对象")来读取,具体实现如下:
package com.example.demo;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "student")//注意对象名称
@Data
@Component
public class Student {public int id;public String name;public int age;
}
@Autowiredprivate Student student;@RequestMapping("/v4")public String v4(){return student.toString();}

配置集合
2022:name:- zhangsan- lisi- wangwu
读取yml配置文件中的集合
集合的读取和对象⼀样,也是使⽤@ConfigurationProperties 来读取的,具体实现如下:
package com.example.demo;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;@Data
@Component
@ConfigurationProperties(prefix = "2022")
public class List2020 {private List<String> name;
}
@Autowiredprivate List2020 list2020;@RequestMapping("/v5")public String v5(){return list2020.toString();}

配置Map
配置⽂件也可以配置map,如下所⽰
maptypes:map:k1: 111k2: 222k3: 333
行内写法作用相同
maptypes2: {map2: {k1: 1, k2: 2, k3: 3}}
Map的读取和对象⼀样,也是使⽤@ConfigurationProperties 来读取的,具体实现如下:
package com.example.demo;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.HashMap;@Data
@Component
@ConfigurationProperties(prefix = "maptypes")
public class MapTypes {public HashMap<String, String> map;
}
@Autowiredprivate MapTypes mapTypes;@RequestMapping("/v6")public String v6(){return mapTypes.toString();}
yml优缺点
优点:
1. 可读性⾼,写法简单,易于理解
2. ⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.
3. ⽀持更多的编程语⾔,不⽌是Java中可以使⽤,在Golang,Python,Ruby,JavaScript中也可以使⽤
缺点:
1. 不适合写复杂的配置⽂件

转换的过程也⽐较花费精⼒,如果配置更复杂⼀点,可读性会更差,代码也会更难写
2. 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)
验证码案例
验证码的实现⽅式很多,可以前端实现,也可以后端实现.⽹上也有⽐较多的插件或者⼯具包可以使⽤, 咱们选择使⽤Hutool提供的⼩⼯具来实现
需求
界⾯如下图所⽰
1. ⻚⾯⽣成验证码
2. 输⼊验证码,点击提交,验证⽤⼾输⼊验证码是否正确,正确则进⾏⻚⾯跳转

约定前后端交互接⼝
需求分析 后端需要提供两个服务
1. ⽣成验证码,并返回验证码
2. 校验验证码是否正确:校验验证码是否正确.
接⼝定义
1. ⽣成验证码
请求: 请求URL: /captcha/getCaptcha
响应:验证码图⽚内容
浏览器给服务器发送⼀个 /captcha/getCaptcha 这样的请求,服务器返回⼀个图⽚,浏览器显 ⽰在⻚⾯上
2. 校验验证码是否正确
请求:/captcha/check 请求URL: /captcha/check 请求参数: captcha=xn8d
captcha:⽤⼾输⼊的验证码
响应: true 根据⽤⼾输⼊的验证码,校验验证码是否正确.
true:验证成功.false:验证失败.
Hutool⼯具介绍
这里验证码的实现,使⽤Hutool提供的⼩⼯具来实现 Hutool是⼀个Java⼯具包类库,对⽂件、流、加密解密、转码、正则、线程、XML等JDK⽅法进⾏封 装,组成各种Util⼯具类. Hutool是⼀个⼩⽽全的Java⼯具类库,通过静态⽅法封装,降低相关API的学习成本,提⾼⼯作效 率,使Java拥有函数式语⾔般的优雅,让Java语⾔也可以"甜甜的".

引入依赖
<dependency> <groupId>cn.hutool</groupId><artifactId>hutool-captcha</artifactId><version>5.8.22</version>
</dependency>
1.获取和验证验证码
package com.example.demo.captcha;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RequestMapping("/captcha")
@RestController
public class HuToolCaptchaController {@GetMapping("/getCaptcha")public void getCaptcha(HttpServletResponse response, HttpSession session){//定义图形验证码的长和宽LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(100, 40, 4, 150);String code = lineCaptcha.getCode();//存储sessionsession.setAttribute("CAPTCHA_KEY",code);//获取当前时间, 验证码的时效性session.setAttribute("CAPTCHA_Date",new Date());//验证码写出,可以写到文件,也可以写到流里try {lineCaptcha.write(response.getOutputStream());//输出System.out.println("生成的验证码: "+ lineCaptcha.getCode());} catch (IOException e) {throw new RuntimeException(e);}}@RequestMapping("/check")public boolean check(HttpSession session, String captcha){//captcha为空,直接返回false;if(!StringUtils.hasLength(captcha)){return false;}String code = (String) session.getAttribute("CAPTCHA_KEY");return captcha.equals(code);}
}


对程序进⾏调整
1)把配置项挪到配置⽂件中
2)把⽣成的验证码存储在Session中,校验时使⽤
yml文件配置项
captcha:height: 40width: 100session:key: CAPTCHA_SESSION_KEYdate: KAPTCHA_SESSION_DATE
验证码配置项对应的Java对象
package com.example.demo.captcha;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;@Data
@Configuration
@ConfigurationProperties(prefix = "captcha")
public class Captcha {private Integer width;private Integer height;private Session session;@Datapublic static class Session{//要使用公开的 静态内部类,// 否则session拿不到值(要先有外部类的对象,然后才能拿到内部类,静态内部类就不用), 或者不要写内部类private String date;private String key;}
}
后端代码实现
package com.example.demo.captcha;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.io.IOException;
import java.util.Date;@RequestMapping("/captcha")
@RestController
public class HuToolCaptchaController {//注入配置文件对应对象@Autowiredprivate Captcha captcha;//过期时间1分钟 = 60秒 * 1000毫秒private static long VALID_TIME_OUT = 60 * 1000;@GetMapping("/getCaptcha")public void getCaptcha(HttpServletResponse response, HttpSession session){//定义图形验证码的长和宽LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(captcha.getWidth(), captcha.getHeight());String code = lineCaptcha.getCode();//存储sessionsession.setAttribute(captcha.getSession().getKey(),code);//当前时间session.setAttribute(captcha.getSession().getDate(),new Date());//验证码写出,可以写到文件,也可以写到流里try {lineCaptcha.write(response.getOutputStream());response.setContentType("image/jpeg");response.setCharacterEncoding("utf-8");//防止缓存response.setHeader("Pragma", "No-cache");//输出System.out.println("生成的验证码: "+ lineCaptcha.getCode());} catch (IOException e) {throw new RuntimeException(e);}}@RequestMapping("/check")public boolean check(HttpSession session, String captcha1){System.out.println("用户输入验证码: "+ captcha1);//captcha为空,直接返回false;if(!StringUtils.hasLength(captcha1)){return false;}String code = (String) session.getAttribute(captcha.getSession().getKey());Date date = (Date) session.getAttribute(captcha.getSession().getDate());if(date == null || (System.currentTimeMillis() - date.getTime()) > VALID_TIME_OUT){return false;}//验证码不区分大小写验证验证码是否正确return captcha1.equalsIgnoreCase(code);}
}
前端代码实现
index.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>验证码</title><style>#inputCaptcha {height: 30px;vertical-align: middle; }#verificationCodeImg{vertical-align: middle; }#checkCaptcha{height: 40px;width: 100px;}</style>
</head><body><h1>输入验证码</h1><div id="confirm"><input type="text" name="inputCaptcha" id="inputCaptcha"><img id="verificationCodeImg" src="/captcha/getCaptcha" style="cursor: pointer;" title="看不清?换一张" /><input type="button" value="提交" id="checkCaptcha"></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$("#verificationCodeImg").click(function(){$(this).hide().attr('src', '/captcha/getCaptcha?dt=' + new Date().getTime()).fadeIn();});$("#checkCaptcha").click(function () {$.ajax({type: "post",url: "/captcha/check",data: {captcha1: $("#inputCaptcha").val()},success: function(result){if(result){location.href = "success.html"}else{alert("验证码错误");}}});});</script>
</body></html>
success.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>验证成功页</title>
</head>
<body><h1>验证成功</h1>
</body>
</html>
测试

总结
- properties是以key=value的形式配置的键值类型的配置⽂件,yml使⽤的是树形配置⽅式.
- 读取配置⽂件内容,使⽤@Value 注解,注解内使⽤" ${} "的格式读取.
- yml层级之间使⽤换⾏缩进的⽅式配置,key和value之间使⽤":"(英⽂冒号)加空格的⽅式设置,并 且空格不可省略.
- properties为早期并且默认的配置⽂件格式,其配置存在⼀定的冗余数据,使⽤yml可以很好的解决 数据冗余的问题,但不适合复杂配置
- yml可以和properties共存,但⼀个项⽬中建议使⽤⼀种配置类型⽂件.
相关文章:
【JavaEE进阶】Spring Boot配置文件
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 目录 SpringBoot配置⽂件 举例: 通过配置文件修改端口号 配置⽂件的格式 properties基本语法 读取配置⽂件 properties配置文件的缺点 yml配置⽂件 yml基本语法 yml和proper…...
学习通用多层次市场非理性因素以提升股票收益预测
“Learning Universal Multi-level Market Irrationality Factors to Improve Stock Return Forecasting” 论文地址:https://arxiv.org/pdf/2502.04737 Github地址:https://github.com/lIcIIl/UMI 摘要 深度学习技术与量化交易相结合,在股…...
【Godot4.3】基于绘图函数的矢量蒙版效果与UV换算
概述 在设计圆角容器时突发奇想: 将圆角矩形的每个顶点坐标除以对应圆角矩形所在Rect2的size,就得到了顶点对应的UV坐标。然后使用draw_colored_polygon,便可以做到用图片填充圆角矩形的效果。而且这种计算的效果就是图片随着其填充的图像缩…...
记一些工具(持续更新)
wireshark——网络抓包工具 mitmproxy ——利用中间人攻击进行https抓包的工具(需配合安装由此代理自己签发的根证书到客户机系统) Cloudflare—— 一个网站中间层,通过基于反向代理的内容分发网络(CDN),Cloudflare提供包括CDN、优化工具、安全、分析以…...
DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!
项目地址:GitHub - deepseek-ai/FlashMLA 开源日历:2025-02-24起 每日9AM(北京时间)更新,持续五天! 一、开源周震撼启幕 继上周预告后,DeepSeek于北京时间今晨9点准时开源「FlashMLA」,打响开源周五连…...
PCL 点云添加高斯噪声
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在点云模型中将所有的点沿其法向量方向随机偏移一定距离,以此来得到点云实体的噪声点,偏移的幅度与点云尺度有关,偏移距离服从高斯分布,以此来获得高斯分布的噪声数据。 二、实现代码 // 标准文件 #include &l…...
通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形
论文标题 英文标题:Improving TSN Traffic Shaping with Constant Bandwidth Server Scheduling 中文标题:通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形 作者信息 作者:Benjamin van Seggelen 指导教师&am…...
软件测试高频面试题
以下是一些软件测试高频面试题: 基础概念类 HTTP和HTTPS的区别:HTTPS使用SSL/TLS协议对传输数据加密,HTTP没有加密;HTTPS可确保数据完整性,防止传输中被篡改,HTTP不保证;HTTP默认用80端口&…...
英语学习DAY5
内心旁白 关于我为什么从2月5号开的这个篇章现在才第五天这件事? 咳咳咳,容许我狡辩一下,我是有事去忙了,我真的很想每日学习英语(信我兄弟们)! 虽然英语学习对我来说真的很难,你…...
如何查看图片的原始格式
问题描述:请求接口的时候,图片base64接口报错,使用图片url请求正常 排查发现是图片格式的问题: 扩展名可能被篡改:如果文件损坏或扩展名被手动修改,实际格式可能与显示的不同,需用专业工具验证…...
Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来
Kronecker分解(K-FAC):让自然梯度在深度学习中飞起来 在深度学习的优化中,自然梯度下降(Natural Gradient Descent)是一个强大的工具,它利用Fisher信息矩阵(FIM)调整梯度…...
赛前启航 | 三场重磅直播集结,予力微软 AI 开发者挑战赛!
随着微软 AI 开发者挑战赛的火热进行,赛前指导直播已成为众多参赛者获取技术干货、灵感碰撞和实战技巧的绝佳平台。继前两期的精彩呈现,第三、四、五期直播即将接连登场,为开发者们带来更加深入的 AI 技术剖析和项目实战指引。无论你是想进一…...
VMware安装Centos 9虚拟机+设置共享文件夹+远程登录
一、安装背景 工作需要安装一台CentOS-Stream-9的机器环境,所以一开始的安装准备工作有: vmware版本:VMware Workstation 16 镜像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …...
【HarmonyOS Next】地图使用详解(一)
背景 这系列文章主要讲解鸿蒙地图的使用,当前可以免费使用,并提供了丰富的SDK给开发者去自定义控件开发。目前可以实现个性化显示地图、位置搜索和路径规划等功能,轻松完成地图构建工作。需要注意的是,现在测试只能使用实体手机去…...
【NLP 37、激活函数 ③ relu激活函数】
—— 25.2.23 ReLU广泛应用于卷积神经网络(CNN)和全连接网络,尤其在图像分类(如ImageNet)、语音识别等领域表现优异。其高效性和非线性特性使其成为深度学习默认激活函数的首选 一、定义与数学表达式 ReLU࿰…...
顶刊配图复现:Origin+DeepSeek完美协同
学习目标: (1)软件掌握熟练安装并配置Origin,掌握基础操作与核心功能。学会利用Origin进行多类型图表绘制及美化。掌握DeepSeek的数据清洗、统计分析与可视化方法。(2)设计能力理解顶刊图表的设计原则&…...
Fisher信息矩阵(Fisher Information Matrix, FIM)与自然梯度下降:机器学习中的优化利器
Fisher信息矩阵与自然梯度下降:机器学习中的优化利器 在机器学习尤其是深度学习中,优化模型参数是一个核心任务。我们通常依赖梯度下降(Gradient Descent)来调整参数,但普通的梯度下降有时会显得“笨拙”,…...
Scratch032(百发百中)
提示:知识回顾 1、排列克隆体的方法 2、复习“发送广播并等待”积木 3、“获取第几个字符”积木的使用 4、使用角色显示得分 前言 提示:中国射箭拥有悠久的历史,是最早进入教育体系的运动项目之一,君子六艺中“礼,乐,射,御,书,数”的射 ,就是指的射箭。这节课我带你…...
DeepSeek技术全景解析:架构创新与行业差异化竞争力
一、DeepSeek技术体系的核心突破 架构设计:效率与性能的双重革新 Multi-head Latent Attention (MLA):通过将注意力头维度与隐藏层解耦,实现显存占用降低30%的同时支持4096超长上下文窗口。深度优化的MoE架构:结合256个路由专家…...
开课倒计时 | 3月1-2日,DeepSeek时代下的可观测性(Observability)认证培训
前言: 随着DeepSeek等前沿AI技术的广泛应用,企业对可观测性的需求日益增长。DeepSeek作为一款强大的AI模型,已经在多个领域展现出其卓越的性能。然而,随着技术复杂性的增加,如何有效监控和优化这些系统成为关键挑战。…...
相似性搜索(2)
在本篇中,我们通过播客相似性搜索为例,进一步研究基于chroma 的相似性搜索: 参考: https://www.kaggle.com/code/switkowski/building-a-podcast-recommendation-engine/notebook 数据集来源: https://www.kaggle.…...
Python天梯赛L1-018-大笨钟详解
018-大笨钟 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点…...
HTTP代理与HTTPS代理的区别及HTTPS的工作原理
在互联网世界中,数据的传输与访问安全性是用户和企业共同关注的焦点。HTTP和HTTPS代理作为两种常用的网络协议代理,它们在工作原理和应用场景上存在显著区别。本文将深入浅出地解析HTTP代理与HTTPS代理的区别,并简明扼要地介绍HTTPS的工作原理…...
【Godot4.3】静态模板字符串函数库
概述 Godot的静态函数从3.4版本一直用到现在的4.3,也曾经编写过不少的静态函数库。 但是一直没怎么用过静态变量。这几天有心重新开发一下静态网页生成器。需要编写一些类,还有保存HTML页面或局部的模板字符串以及生成函数。静态变量就刚好用上了。 这…...
Minio分布式多节点多驱动器集群部署
Minio分布式多节点多驱动器集群部署 Minio分布式多节点多驱动器集群部署节点规划先决条件开放防火墙端口设置主机名更新域名映射文件时间同步存储要求内存要求 增加虚拟机磁盘(所有机器都要执行)部署分布式 MinIO测试上传与预览测试高可用MinIO 配置限制模拟单节点磁盘故障模拟…...
忽略Git文件的修改,让它不被提交
使用Git托管的工程中,经常有这样的需求,希望文件只是本地修改,不提交到服务端。 如果仅仅是本地存在的文件,我们可以通过.gitignore配置避免文件被提交。 有的时候文件是由git托管的,但是我们希望只在本地修改&#…...
EntityFrameCore DbFirst 迁移
ORM框架:不用关心sql语句,只需要以类为单位,去操作数据库,以面向对象的思想来完成对数据库的操作。 EntityFrameCore-DbFirst Nuget引入程序集 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.SqlServer.Design…...
【信号量】
信号量 目录操作系统信号信号的默认处理动作示例解释信号的捕获与处理使用 signal 函数使用 sigaction 函数 信号的阻塞 信号的生命周期1. 信号产生2. 信号在进程中注册3. 信号在进程中注销4. 信号处理main 7 signal命令含义使用场景手册页包含的关键信息1. 信号概述2. 信号列表…...
安卓cmake修改版本设置路径
有两个位置需要修改: 1、local.properties 在这里设置cmake的本地路径 cmake.dirE\:\\Android_Studio\\sdk\\cmake\\3.22.1 sdk.dirE\:\\Android_Studio\\sdk2、build.gradle里面内容的修改 apply plugin: com.android.applicationandroid {compileSdkVersion 24b…...
如何安装VMware
安装VM...

