1. 什么是配置文件

        在我们的计算机上诸如 C:/Users,C:/Windows,.config,.xml 都是配置文件,配置文件主要为了解决硬编码带来的问题。硬编码是将数据直接写在程序的源代码中,代码写死后再想改变就很麻烦。因此,将可能改变的信息放在一个集中的文件中,程序启动后读取其中的数据。

2. SpringBoot 对配置文件的支持

        SpringBoot 约定配置文件应放在 resources 目录下,文件名应使用 application,格式为 .yml 或 .properties。properties 是早期的配置文件格式,也是 SpringBoot 约定的默认格式。当 yml 文件和 properties 文件共存时,properties 文件优先级更高。实际开发中应使用统一的配置文件格式,维护成本更低。

3. properties 文件格式

        键值对形式,key 和 value 之间 = 分割

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

        使用 @Value 注解在程序中注入配置文件中的数据。 

name=li
    @Value("${name}")public String name;

4. yml 文件格式

        properties 文件格式中有大量冗余信息,yml 文件是一种更新型和轻量的文件格式。yml 文件采用树形结构,key 和 val 之间使用冒号加空格,空格不可省略。

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=falseusername: rootpassword: root

       使用 yml 配置不同类型的单个数据。依然使用 @Value 注入数据。

example:v1: Hello   #字符串不需要加引号v2: truev3: falsev4: 3.12723v5: ~   #表示nullv6: ''  #表示空字符串v7: "Hello \n yml"   #加双引号后该子串中的特殊字符会生效,此时会换行

         使用 yml 配置对象。此时需要使用 @ConfigurationProperties 注解注入。被注入 val 的 bean 必须提供 Setter 方法,因为 Setter 方法 是 Spring 在绑定过程中通过反射调用的入口,框架会尝试将配置的键名与 Setter 方法名匹配。如果没有 Setter,Spring 无法通过反射直接修改 private 字段(即使字段是 public,也不符合封装原则)。

student:name: liage: 18hobby:  # list必须依赖对象才能配置- football- boxing- runningscore:  # 可以使用map获取,也可以单个获取math: 90physics: 88
@Data
@Configuration
@ConfigurationProperties("student")
public class User1 {public String name;public Integer age;public List<String> hobby;public Map<String, String> score;
}

5. SpringBoot 日志

5.1 为何要使用日志

        通过日志监控系统的运行状态。

        使用日志进行数据采集,推荐排序。算法人员通过分析采集的数据,训练模型,为用户做推荐。

        日志一定程度上保障网络安全。比如一些内部的用户信息泄露,如果记录了日志就可以为调查提供证据。

5.2 门面模式与 SLF4J

        门面模式又称为外观模式,其特征是使用一个统一的高层接口,来访问其下众多子系统中的接口,这使得每个子系统的调用都更具规范性和统一性,降低调用者的学习成本。每个子系统都不是一个单独的类,而是类的集合,子系统可以被独立使用。子系统不知道高层接口(门面)的存在,站在子系统的角度上看,门面只是另一个客户端。

        即将学习的日志系统 SLF4J 就是一个门面,而不是真正的日志实现,它是为许多日志框架做出的统一规范。因此单独使用 SLF4F 是没有任何意义的,它在底层需要和真正的日志框架配合,真正的日志实现包括 log4j、JUL 和 logback,这些框架已经被封装在门面之下了。SLF4J 使我们的代码独立于任何一个特定的日志 API。

5.3 日志具体格式

        日志级别

        FATAL:致命信息,说明此时系统已经一定程度上不可用,一个进程的生命周期中理论上最多出现一次 FATAL。

        ERROR:错误信息,级别较高,但系统可以继续运行

        WARN:警告信息,需要注意的问题

        INFO:普通信息,用于记录程序正常的运行信息

        DEBUG:调试信息,调试时的关键信息打印

        TRACE:追踪信息,颗粒度最细的信息打印,并不常用

        日志级别是开发人员自行设置的,供开发人员检测使用,并不是测试中的 Bug 级别。越高级别的日志会给开发者回馈更少的消息。

5.4 基础使用

        使用 slf4j 包下的 LoggerFactory 就可以轻松创建日志对象,使用 Logger 类接收。需要传递一个参数作为日志名称,建议填入源类名以方便追踪问题所在地。

private static Logger logger = LoggerFactory.getLogger(Demo4.class);logger.info("此处为输入日志的内容...")

        测试不同级别的日志:每当客户端调用该方法,该方法都会在控制台打印一次日志。日志输出的默认级别是 INFO,因此 DEBUG 和 TRACE 级别的日志不会被打印。

5.5 日志的灵活配置 

        使用 logging.level 配置日志输出级别,root 作用于整个项目,同级添加某个类路径以特指该类下日志输出的级别。

        日志持久化。若同时配置两个配置项则以 name 为准。

        随着日志文件越来越大,需要对其进行分割。默认情况下日志文件超过 10M 就会进行分割。如图为了方便演示设置文件上限为 1KB,企业开发通常设置 500M 左右,此处没有严格标准。默认情况下生成压缩文件(.gz),可以通过更改文件名格式来更改。

        此时生成了普通文本文件。

        日志还有诸多可以自定义的部分,比如日志打印格式,颜色等等。

        lombok 为我们提供更简单的日志对象获取方法。使用 @Slf4j 注解代替手动从 LoggerFactory 取对象的操作,自动生成名为 log 的对象。

6. 单元测试

        在 SpringBoot 项目需要针对某个方法进行测试时,首先使用 IDEA 自动生成测试类。

        

         设计单元测试要求每个用例之间互相独立,互不干扰。setUp 方法在每个测试方法执行前都会执行,用于准备测试需要的环境,tearDown 方法在每个测试方法执行后都会执行,用于消除方法执行过程中产生的中间结果。

        

        测试类中的 @SpringBootTest 注解会自动加载 Spring 的运行环境,@BeforeEach 注解声明 setUp 方法,@AfterEach 注解声明 tearDown 方法,@Test 注解声明测试方法。除此之外,测试类与普通类没有太大区别,可以在其中任意添加需要的属性,或使用 Autowired。也可以写不带 Test 注解的普通方法,用于准备不同的测试用例。

        单元测试非常重要,单元测试做得越完善,后期出现问题,查找问题的成本越低。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake实践:常见的调试技巧

目录 1.简介 2.用 message() 输出关键信息 2.1.message简介 2.2.常用模式及作用 2.3.核心用法示例 2.4.常见问题及解决 3.查看缓存变量&#xff1a;cmake -L 与缓存文件 3.1.列出所有缓存变量&#xff08;cmake -L&#xff09; 3.2.直接查看 / 删除 CMakeCache.txt 4…

爬虫-第一个爬虫程序

浏览器里面都是html数据&#xff0c;拿到的都是页面源代码&#xff0c;可以用自己的方式打开测试。打开浏览器decode找charset

从SEO到GEO:优化策略如何应对传统搜索与AI搜索的巨变

AI 搜索与传统搜索结果优化之间有什么重叠之处&#xff1f; 为了帮助确定主要的差异&#xff0c;以及那些重叠程度最高的区域&#xff0c;我创建了一个比较&#xff08;我会保持更新&#xff09;&#xff0c;通过搜索行为、优化领域、结果展示和交付&#xff0c;以及要跟踪的 K…

mysql5.7系列-InnoDB的MVCC实现原理

谈到数据库事务都要提一下ACID 特性&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务中的操作要么全部执行&#xff0c;要么全部不执行。 一致性&#xff08;Consistency&#xff09;&#xff1a;事务执行前后&#xff0c;数据库的状态必须是一致的。 …

力扣-287.寻找重复数

题目链接 287.寻找重复数 class Solution {public int findDuplicate(int[] nums) {int low nums[0];int fast nums[nums[0]];//1.快慢指针找相遇点while (low ! fast) {low nums[low];fast nums[nums[fast]];}//2.双指针找入环点int pre 0;while (pre ! low) {pre num…

Java 大视界 -- Java 大数据在智能教育个性化学习计划制定与动态调整中的应用(338)

Java 大视界 -- Java 大数据在智能教育个性化学习计划制定与动态调整中的应用&#xff08;338&#xff09; 引言&#xff1a;正文&#xff1a;一、Java 构建的学习行为数据采集与分析体系1.1 全场景数据接入引擎1.2 家校协同数据交互模块1.3 学习特征提取与建模 二、Java 驱动的…

uniapp返回webview返回小程序并且跳转回webview

webview页面提示&#xff1a;wx一定要导入sdk// 返回小程序&#xff0c;并携带当前 WebView 的 URL 和状态wx.miniProgram.postMessage({type: requestPayment,data: {webviewUrl: window.location.href,orderNum: this.orderNum,type: requestPayment}})setTimeout(() > {w…

[java: Cleaner]-一文述之

Cleaner Cleaner 是 Java 9 引入的资源清理机制&#xff0c;用于在对象被垃圾回收后自动或手动执行清理操作&#xff0c;替代 finalize()&#xff0c;安全、异步且高效。 public final class Cleaner {final CleanerImpl impl;static {CleanerImpl.setCleanerImplAccess(new Fu…

知识库中如何确实嵌入文本块大小?语义完整性与检索颗粒度的平衡机制

一、文本块大小确定的理论基础与历史演进 1.1 概念起源与发展脉络 文本块&#xff08;Text Chunk&#xff09; 这一概念最初源于信息检索领域的实践需求。早期的全文检索系统面临着一个根本性矛盾&#xff1a;如何在保持文档语义完整性的同时&#xff0c;实现高效的信息定位。这…

C/C++ 实现在快速排序Quick Sort中的三种分区方式

1. 简介神说, 要有光. 于是就有了光. 神说要有快排, 于是就有了快排. 快速排序Quick Sort的发明者 托尼 霍尔 是1980年的图灵奖得主. 快速排序就是他发明的. 当时发明的背景是: 由于霍尔要高效地对俄语词汇进行排序以优化翻译程序, 而当时的排序算法(如冒泡, 插入排序)效率较低…

Flink TiDB CDC 环境配置与验证

一、TiDB 数据库核心配置 1. 启用 TiCDC 服务 确保 TiDB 集群已部署 TiCDC 组件&#xff08;版本需兼容 Flink CDC 3.0.1&#xff09;&#xff0c;并启动同步服务&#xff1a; # 示例&#xff1a;启动 TiCDC 捕获 changefeed cdc cli changefeed create \--pd"localhos…

2025年数据挖掘与计算机科学国际会议 (DMCS 2025)

2025 International Conference on Data Mining and Computer Science【一】、大会信息 会议简称&#xff1a;DMCS 2025 大会地点&#xff1a;中国广州 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等【二】会议简介2025年数…

腾讯轻量云和云服务器的区别

从问题本身来看&#xff0c;用户应该对云计算有基本了解&#xff0c;但可能不太清楚腾讯云产品线的细分定位。这类问题通常出现在项目初期技术选型阶段&#xff0c;用户需要权衡成本和性能。 让我先梳理两者的核心差异点。轻量云本质是面向轻量级应用的打包解决方案&#xff0c…

在使用ffmpeg时遇到了复制路径在终端输入指令后,报错的解决方法

错误如下所示&#xff1a;解决方法&#xff1a;​​检查路径中的特殊字符​​&#xff1a;你的路径中包含了一个不可见的Unicode字符&#xff08;‪&#xff0c;即LEFT-TO-RIGHT MARK&#xff09;&#xff0c;这是从网页复制路径时常见的隐藏字符​​解决方案​​&#xff1a;直…

高频变压器材料新解:纳米晶的涡流损耗逆袭之路

通过带材做薄纳米晶&#xff0c;可以降低涡流损耗。原因有二&#xff1a;一、纳米晶做薄可以减小磁场的趋肤效应&#xff1b;二、纳米晶越薄材料电阻越高&#xff0c;整体电阻越大&#xff0c;涡流损耗越小。本篇&#xff0c;就来详细谈谈变压器的涡流损耗。 铁氧体材料成本低&…

DMA技术与音频数据的存储和播放

基本概念 采样率: 每秒采集的采样点次数。如480000HZ, 就是我们常见的48KHZ采样点(Sample):每一个采样点代表一个时间点的声音幅度值。对于立体声,每个采样点包含了两个声道(左声道,右声道)的数据。帧:一帧就是一个时刻采集的数据,如果音频是立体声则会产生2个采样点,如…

项目进度受外包团队影响,如何管控交付节奏

项目进度受外包团队影响时&#xff0c;管控交付节奏的关键措施包括明确交付标准与节点、建立可视化进度监控机制、强化合同约束与激励条款、保持高频沟通与快速响应机制、建立联合质量审查机制。其中&#xff0c;明确交付标准与节点最为关键。通过制定具体、可量化的交付标准与…

BM9 删除链表的倒数第n个节点

目录 题目链接 题目 解题思路 代码 题目链接 删除链表的倒数第n个节点_牛客题霸_牛客网 题目 解题思路 先利用快慢指针找到删除位置的前一个节点,然后进行删除即可(具体就是快指针先移动n1个,因为要找到删除指针的前一个节点) 代码 import java.util.*;/** public clas…

java中ehcache因为可以缓存到本地,假如生产环境使用ehcache是不是需要在生产环境服务器创建缓存文件夹目录以存储ehcache缓存的数据

是的&#xff0c;当在生产环境中使用 Ehcache 的磁盘持久化功能时&#xff0c;确实需要在服务器上创建相应的缓存文件夹目录&#xff0c;并确保应用程序有权限读写该目录。 以下是详细说明和配置建议&#xff1a;1. 为什么需要创建缓存目录&#xff1f;Ehcache 的磁盘持久化功能…

day55

1. 序列预测介绍序列预测就是根据过去的序列数据&#xff08;比如时间顺序的数据&#xff09;&#xff0c;预测未来的结果。• 单步预测&#xff1a;只预测下一个时刻的值。比如根据前7天的气温&#xff0c;只预测第8天的气温。• 多步预测的2种方式&#xff1a;◦ 递归式&…