【Java EE】SpringBoot 配置文件、日志和單元測試

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;? 遞歸式&…