」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 提高 Spring Boot 應用程式的效能 - 第一部分

提高 Spring Boot 應用程式的效能 - 第一部分

發佈於2024-11-08
瀏覽:986

Melhorando o desempenho de aplicações Spring Boot - Parte I

啟動Spring Boot應用程式時,我們通常使用啟動器提供的預設設置,這對於大多數情況來說已經足夠了。但是,如果我們需要效能,則可以進行具體調整,如本文第一部分所示。

Tomcat 替換為另一個 servlet 容器

應用程式webRESTFul,使用Spring MVC,一般添加spring-boot-starter-web依賴,預設使用Tomcat作為伺服器網路。然而,還有更有趣的替代方案,例如Undertow,這是一個高效能的web伺服器,具有非同步和非阻塞架構,這使得它能夠處理大量資料高效的同時連接,使其適合高效能應用。我們並不是說 Tomcat 不好,但我們可以給 Undertow.

一個機會。

Undertow 加入 Spring

為了讓我們使用Undertow作為web伺服器,我們需要忽略spring-boot-starter-web 已經添加的spring-boot-starter-tomcat 依賴然後添加spring-boot -starter-undertow.

使用pom.xml:

org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-tomcatorg.springframework.bootspring-boot-starter-undertow

使用build.gradle:

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    }
    implementation 'org.springframework.boot:spring-boot-starter-undertow'
}

配置潛流

透過application.properties或application.yml,我們可以設定我們希望伺服器使用多少IO線程和多少工作線程

使用application.yml

server:
  undertow:
    threads:
      io: 4
      worker: 64

使用 application.properties

server.undertow.threads.io=4
server.undertow.threads.worker=64

I/O 執行緒執行非阻塞操作,並且永遠不應該執行阻塞操作,因為它們負責偵聽到達應用程式的連接,然後將它們傳送到處理佇列。常見值為每個 CPU 核心兩個 I/O 執行緒

工作執行緒執行阻塞操作,例如由I/O Threads傳送至處理佇列的Servlet請求。理想值取決於工作負載,但通常建議每個 CPU 核心配置 10 個左右的執行緒。

有關更詳細的資訊和更多可探索的選項,只需前往 Undertow 文件即可。

壓縮 HTTP 回應

資料壓縮是一項旨在減少 HTTP 回應正文大小的功能,從而可以透過減少透過網路傳輸的資料量來提高應用程式的效能。

在 Spring Boot 中配置資料壓縮是一項簡單的任務,因為它支援此功能。

使用application.yml

server:
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
    min-response-size: 1024

使用 application.properties

server.compression.enabled=true
server.compression.mime-types=text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
server.compression.min-response-size=1024

server.compression.enabled:啟用/停用壓縮。
server.compression.mime-types:應壓縮的 MIME 類型清單。
server.compression.min-response-size:執行壓縮所需的「Content-Length」的最小大小。

至此,我們結束了本文的第一部分。在下一部分中,我們將詳細了解 Hikari、JPA 和 Hibernate,並學習如何配置它們,以進一步提高 Spring Boot 應用程式的效能。

版本聲明 本文轉載於:https://dev.to/mathstylish/melhorando-a-performance-de-aplicacoes-spring-boot-parte-i-58jl?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 變化偵測從 Angular zone.js) 到 Angular (provideExperimentalZonelessChangeDetection) 的演變
    變化偵測從 Angular zone.js) 到 Angular (provideExperimentalZonelessChangeDetection) 的演變
    更改偵測是 Angular 的一個基本面,負責識別和更新 DOM 中因資料修改或使用者互動而發生變更的部分。此過程可確保 UI 與底層資料保持一致,從而增強使用者體驗和應用程式效能。 Zone.js 的作用 從歷史上看,Angular 一直依賴 Zone.js 來實現其變更檢測機制...
    程式設計 發佈於2024-11-08
  • 使用 Streamlit 深入研究數據應用程式
    使用 Streamlit 深入研究數據應用程式
    The ability to quickly develop and deploy interactive applications is invaluable. Streamlit is a powerful tool that enables data scientists and develo...
    程式設計 發佈於2024-11-08
  • Go 中的匿名結構:何時在 `map[string]struct{}` 中指定類型是多餘的?
    Go 中的匿名結構:何時在 `map[string]struct{}` 中指定類型是多餘的?
    匿名結構:揭示struct{}{} 和{} 之間的差異在Go 中,聲明字串到匿名結構映射可以透過兩種方式完成:var Foo = map[string]struct{}{ "foo": struct{}{}, }var Foo = map[string]struct{}{...
    程式設計 發佈於2024-11-08
  • 我如何為我的 React Native 專案設定設計系統以加快開發速度
    我如何為我的 React Native 專案設定設計系統以加快開發速度
    曾经构建过您不想自己使用的应用程序吗? 当我还是初级应用程序开发人员时,我曾经构建混乱的用户界面。 有时,当看到这些 UI 时,我曾经想“世界上谁会想使用这个?它看起来很糟糕”。 其他时候,只是有些“不对劲的地方”我无法指出。 虽然我曾经从设计团队那里获得过令人惊叹的精美设计,但我的应用程序看起来连...
    程式設計 發佈於2024-11-08
  • 如何使用 PHP 有效率地檢查檔案中的字串?
    如何使用 PHP 有效率地檢查檔案中的字串?
    如何在PHP 中檢查文件是否包含字串要確定文件中是否存在特定字串,讓我們探索一下解決方案和更有效的替代方案。 原始程式碼:提供的程式碼嘗試檢查檔案中是否存在字串,由變數 $id 表示,透過逐行讀取檔案。但是,while 迴圈中的條件 (strpos($buffer, $id) === false) ...
    程式設計 發佈於2024-11-08
  • 如何在不離開目前頁面的情況下開啟下載視窗?
    如何在不離開目前頁面的情況下開啟下載視窗?
    在不離開當前頁面的情況下打開下載視窗的最簡單方法要在不離開當前頁面或打開彈出視窗的情況下開啟下載對話框,使用以下跨瀏覽器JavaScript:window.location.assign(url);此方法不會開啟新視窗或選項卡,甚至在 Internet Explorer 6 中也能正常運作。 透過將...
    程式設計 發佈於2024-11-08
  • 如何在 C++ 中使用虛擬模板方法實現多態性?
    如何在 C++ 中使用虛擬模板方法實現多態性?
    C 虛擬模板方法在C 中,將靜態時間多態性(模板)與運行時多態性結合起來可能具有挑戰性。這在以下抽象類別中很明顯:class AbstractComputation { public: template <class T> virtual void setData...
    程式設計 發佈於2024-11-08
  • 多執行緒:工程師的關鍵概念 - 第 1 部分
    多執行緒:工程師的關鍵概念 - 第 1 部分
    了解关键的多线程概念对于软件开发人员至关重要,因为它不仅可以增强技能,还可以直接影响应用程序开发、可扩展性和软件解决方案的整体质量。 原子性 在多线程上下文中,原子操作确保一个线程可以执行一系列操作,而不会被其他线程中断。多个线程可能会尝试同时读取或写入共享数据。如果没有原子性,并...
    程式設計 發佈於2024-11-08
  • 後端開發路線圖
    後端開發路線圖
    對於所有有抱負的後端開發人員,我知道導航您的學習道路是多麼令人畏懼。這就是為什麼我很高興能夠提供詳細的路線圖來幫助您掌握用於後端開發的 JavaScript! ? 1️⃣ 從基礎開始:熟悉 JavaScript 基礎知識。理解變數、函數和控制結構至關重要。 2️⃣ 深入了解 Node.js:這個...
    程式設計 發佈於2024-11-08
  • 如何在Go中呼叫Linux共享函式庫函數?
    如何在Go中呼叫Linux共享函式庫函數?
    在Go 中呼叫Linux 共享庫函數在此問題中,開發人員尋求從共享對象(.so) 調用函數的幫助他們的Go 程式碼中的檔案。 Python 中的 ctypes 套件可以存取 C 函數,可以作為所需的功能。 使用 cgo 進行靜態共享庫載入靜態呼叫函數在編譯時已知共享庫,可以使用 cgo 套件。以下是...
    程式設計 發佈於2024-11-08
  • Java 中的字串文字是否會被垃圾收集?
    Java 中的字串文字是否會被垃圾收集?
    字串文字的垃圾收集Q1:如果一個字串在編譯時被定義為文字(例如,String str = "java"),它會被垃圾收集嗎? 通常不會。程式碼物件包含對文字 String 物件的引用,使它們保持可訪問性。垃圾回收僅在程式碼物件變得不可存取時發生。 Q2:如果使用intern 方法...
    程式設計 發佈於2024-11-08
  • 跨平台使用 RSA 加密和解密保護數據
    跨平台使用 RSA 加密和解密保護數據
    RSA加密簡介 在當今的數位環境中,保護敏感資料對於個人和組織都至關重要。 RSA (Rivest-Shamir-Adleman) 加密作為保護資料的強大解決方案脫穎而出。它是一種非對稱加密演算法,這意味著它使用一對金鑰:用於加密的公鑰和用於解密的私鑰。 RSA 加密的主要好處之一...
    程式設計 發佈於2024-11-08
  • 如何利用導師在數位行銷中實現職業發展
    如何利用導師在數位行銷中實現職業發展
    在当今快速发展的数字营销环境中,保持领先趋势并提高您的技能至关重要。加速该领域职业发展的最有效方法之一是利用指导。无论您是刚刚起步还是希望晋升为领导角色,数字营销导师都可以提供宝贵的指导和见解,帮助您实现职业目标。本文探讨了指导如何塑造您的职业轨迹,并提供了充分利用指导经验的策略。 ...
    程式設計 發佈於2024-11-08
  • 將 Cloudinary 整合到 Next.js 應用程式中
    將 Cloudinary 整合到 Next.js 應用程式中
    以了解 Cloudinary 及其定價。 1. 建立一個Cloudinary帳戶 如果您沒有帳戶,請在 Cloudinary 註冊並建立一個新帳戶。 2.安裝Cloudinary SDK 您可以使用npm或yarn安裝Cloudinary SDK: npm ins...
    程式設計 發佈於2024-11-08
  • 我們如何在 CSS 中將後代元素分組?
    我們如何在 CSS 中將後代元素分組?
    用於後代分組的難以捉摸的CSS 選擇器雖然CSS 為樣式元素提供了強大的選項,但一個值得注意的缺失是輕鬆將後代分組的能力。當對 HTML 表格等複雜元素進行樣式設計時,這種限制變得很明顯,其中為列標題和單元格分配相同的樣式需要繁瑣的選擇器。 後代樣式設計的困境考慮下面的表示例:<table i...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3