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

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

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

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

在本文的第一部分中,我们学习了如何提高应用程序的性能,将 Tomcat 替换为 Undertow,即高性能 Web 服务器,除了启用和配置数据压缩之外,还可以减少通过网络传输的 HTTP 响应的大小。

现在,我们将讨论如何在持久化部分提高Spring Boot应用程序的性能,但首先我们需要了解什么是JPAHibernateHikari.

日本PA

JPA 或 Java Persistence API,后来重命名为 Jakarta Persistence,是一种 Java 语言标准,描述了通用的数据持久化框架的接口

JPA 规范在内部定义对象关系映射,而不是依赖于特定于供应商的映射实现。

休眠

HibernateORM 框架之一,它具体实现了 JPA 规范。也就是说,如果在本规范中描述了需要 persistremoveupdatefetch data 的方法,那么谁会实际上构建这些行为的是Hibernate,以及EclipseLink,这是另一个ORM .

Hikari是一个连接池框架,它负责管理与数据库的连接,保持它们打开以便可以重用,即,它是用于未来请求的连接的缓存,使对数据库的访问更快并减少要创建的新连接的数量。

配置 Hikari、JPA 和 Hibernate

我们可以执行以提高性能的配置如下:

使用application.yml:


春天: 光: 自动提交: false 连接超时:250 最大寿命:600000 最大池大小:20 最小空闲:10 池名称:master 杰帕: 在视图中打开: false 显示sql:true 休眠: ddl 自动:无 特性: hibernate.connection.provider_disables_autocommit:true hibernate.generate_statistics:true
spring:
  hikari:
    auto-commit: false
    connection-timeout: 250
    max-lifetime: 600000
    maximum-pool-size: 20
    minimum-idle: 10
    pool-name: master

  jpa:
    open-in-view: false
    show-sql: true
    hibernate:
      ddl-auto: none
    properties:
      hibernate.connection.provider_disables_autocommit: true
      hibernate.generate_statistics: true
使用 application.properties:


spring.datasource.hikari.auto-commit=false spring.datasource.hikari.connection-timeout=50 spring.datasource.hikari.max-lifetime=600000 spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.pool-name=master spring.datasource.jpa.open-in-view=false spring.datasource.jpa.show-sql=true spring.datasource.jpa.hibernate.ddl-auto=无 spring.jpa.properties.hibernate.generate_statistics=true spring.jpa.properties.hibernate.connection.provider_disables_autocommit=true
spring:
  hikari:
    auto-commit: false
    connection-timeout: 250
    max-lifetime: 600000
    maximum-pool-size: 20
    minimum-idle: 10
    pool-name: master

  jpa:
    open-in-view: false
    show-sql: true
    hibernate:
      ddl-auto: none
    properties:
      hibernate.connection.provider_disables_autocommit: true
      hibernate.generate_statistics: true
现在让我们简单总结一下选项:

  • spring.datasource.hikari.auto-commit:如果为 false,

    连接池返回的每个连接都会禁用自动提交

  • spring.datasource.hikari.connection-timeout:客户端等待来自

    的连接的时间(以毫秒为单位)。最好设置一个较短的超时以快速失败并返回错误消息,而不是让客户端无限期地等待。

  • spring.datasource.hikari.max-lifetime:连接可以保持活动状态的最长时间。配置此参数对于避免由于有问题的连接而导致失败并提高安全性至关重要,因为长时间处于活动状态的连接更容易受到攻击。

  • spring.datasource.hikari.maximum-pool-size:

    的最大大小,包括空闲和使用中的连接,确定数据库的最大活动连接数。如果池达到此限制并且没有空闲连接,则对 getConnection() 的调用将在失败之前阻塞最多 connectionTimeout 毫秒。

      找到一个合适的值很重要,因为许多人认为将其设置为 50、70 甚至 100 会获得出色的性能。理想的是最大为 20,这是
    • 线程的数量 使用连接并行。
    • 值越高,数据库管理这些连接就越困难,并且很可能我们将无法拥有足够的
    • 吞吐量来使用所有这些连接。
    • 重要的是要理解,从
    • RDBMS关系数据库管理系统)的角度来看,很难保持与其自身的开放连接,想象一下n个连接.
  • spring.datasource.hikari.minimum-idle:需求较低时池维持的最小连接数。该池最多可以减少 10 个连接,并根据需要重新创建它们。但是,为了获得最佳性能并更好地响应需求峰值,建议不要设置此值,从而允许 Hikari 作为固定大小池运行。默认值:与 spring.datasource.hikari.maximum-pool-size.

    相同
  • spring.datasource.hikari.pool-name:连接

    pool的用户定义名称,主要出现在注册表管理控制台和JMX中以标识及其配置。

日本PA

  • spring.datasource.jpa.open-in-view: 当启用

    OSIV (Open Session In View) 时,在整个请求过程中都会维护一个会话,即使没有@Transactional注释。这可能会导致性能问题,例如缺乏应用程序响应,因为会话会保持与数据库的连接直到请求结束。

  • spring.datasource.jpa.show-sql:显示我们的应用程序中正在执行的SQL日志。我们通常在开发中启用它,但在生产中禁用它。

  • spring.datasource.jpa.hibernate.ddl-auto:配置

    Hibernate相对于数据库的schema的行为。它可以具有以下值:

      无:不执行任何操作。我们手动管理银行的架构。
    • validate:验证数据库的
    • 架构,但不进行任何更改。这对于确保当前的架构与我们映射的实体一致很有用。
    • 更新:更新数据库的
    • 架构以反映实体的更改。
    • create:创建数据库的
    • 架构。如果架构已经存在,它将删除并重新创建它。
    • create-drop:从数据库创建
    • schema,并在应用程序结束时删除 schema。对于测试很有用,我们希望每个测试都有一个干净的数据库。
  • spring.jpa.properties.hibernate.generate_statistics:用于收集有关 Hibernate 的详细信息,例如查询执行时间、执行的查询数量和其他指标。

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit:通知

    Hibernate我们已经禁用了提供者的自动提交 PostgreSQLMySQL等)。这会影响性能,因为Hibernate需要从获取连接才能知道自动提交是否启用,对于他所做的每笔交易。

至此,我们结束本文的第二部分。并非所有设置都与性能有关,但真正影响的是

Hikari 设置,例如 自动提交池大小JPAHibernate 的那些,如 OSIV在视图中打开会话)并通知您我们已禁用 providers自动提交

在下一部分中,我们将讨论异常以及如何配置它们,以节省

JVMJava 虚拟机)的资源。

参考:

    https://en.wikipedia.org/wiki/Jakarta_Persistence
  • https://www.ibm.com/docs/pt-br/was/8.5.5?topic=SSEQTP_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/cejb_persistence.htm
  • https://github.com/brettwooldridge/HikariCP
  • https://github.com/corona-warn-app/cwa-server/issues/556
  • https://medium.com/@rafaelralf90/open-session-in-view-is-evil-fd9a21645f8e
版本聲明 本文轉載於:https://dev.to/mathstylish/melhorando-o-desempenho-de-aplicacoes-spring-boot-parte-ii-nbi?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何維護禁用的選擇元素中的輸入欄位值?
    如何維護禁用的選擇元素中的輸入欄位值?
    在禁用的選擇元素中維護輸入字段值防止用戶修改 表單字段,同時確保提交其值通過利用特定技術來實現。 停用選擇元素和選項One方法是停用選擇元素及其選項。這會阻止使用者與元素交互,從而創建唯讀效果。但是,它也會阻止提交該值。 在提交表單之前啟用元素要解決此問題,請在提交表單之前停用所有已停用的下拉式選單...
    程式設計 發佈於2024-11-09
  • 如何確定 C++ 中動態分配數組的大小?
    如何確定 C++ 中動態分配數組的大小?
    在C 中動態分配後確定數組大小在C 中,使用new 運算子動態分配的數組本質上不會以程式設計方式公開其大小。這個問題源自於這樣的觀察:delete[] 必須知道分配的陣列的大小才能有效地釋放記憶體。 為什麼沒有內建函數來取得陣列大小? 與在堆疊上聲明的數組不同,其大小可以使用 sizeof() 確定...
    程式設計 發佈於2024-11-09
  • Nginx 在 https 埠上強制 http 轉為 https
    Nginx 在 https 埠上強制 http 轉為 https
    範例腳本 nginx : server { listen 443 default ssl; listen [::]:443 ssl; root /var/www/html/api_mobile/public; include snip...
    程式設計 發佈於2024-11-09
  • 解決 PHP 中的命名空間問題:為什麼找不到類別?
    解決 PHP 中的命名空間問題:為什麼找不到類別?
    解決 PHP 自動載入的命名空間問題在 PHP 中使用命名空間和自動載入機制時,經常會遇到無法找到所需類別的錯誤。讓我們探討一下這個錯誤背後的原因並提供解決方案。 如提供的程式碼片段所示,出現錯誤「Class 'Class1' not found」是因為 Class1 類別未在全域範...
    程式設計 發佈於2024-11-09
  • 如何輕鬆將 JavaScript 陣列轉換為逗號分隔清單?
    如何輕鬆將 JavaScript 陣列轉換為逗號分隔清單?
    提升JavaScript:輕鬆將陣列轉換為逗號分隔清單在JavaScript 中處理陣列時,將它們轉換為可讀格式像逗號分隔的清單通常是常見任務。有一個巧妙的方法可以輕鬆實現此目的,而不是訴諸手動字串連接。 Array.prototype.join() 方法介紹陣列。 prototype.join()...
    程式設計 發佈於2024-11-09
  • Java Sound 可以播放 MP3 檔案嗎?
    Java Sound 可以播放 MP3 檔案嗎?
    Java Sound 預設不支援 MP3。對於特定 JRE 中支援的類型,請檢查 AudioSystem.getAudioFileTypes()。 有一種方法可以加入 MP3 支援。將基於 JMF 的 mp3plugin.jar 加入到專案的執行時間類別路徑中。 雖然 javax.sound.sam...
    程式設計 發佈於2024-11-09
  • 如何在 Socket.IO 中阻止發送方接收回應?
    如何在 Socket.IO 中阻止發送方接收回應?
    如何在 Socket.IO 中向發送者以外的所有客戶端發送回應? Socket.IO 提供了一系列的通訊方法用戶端和伺服器。要將訊息傳送到所有客戶端,可以使用 io.sockets.emit('response', data);。但是,當您需要排除發送客戶端接收回應時,這種方法就不夠...
    程式設計 發佈於2024-11-09
  • 如何在 Go 中使用即時請求測試 HTTP 伺服器?
    如何在 Go 中使用即時請求測試 HTTP 伺服器?
    在Go 中使用即時請求測試HTTP 伺服器獨立的單元測試處理程序至關重要,但可能忽略路由和其他中間件的影響。對於全面的測試,請考慮使用“實時伺服器”方法。 使用 httptest.Server 進行即時伺服器測試net/http/httptest.Server 類型有助於即時伺服器測試。它使用提供的...
    程式設計 發佈於2024-11-09
  • 如何在添加數據時自動滾動 Div 到末尾?
    如何在添加數據時自動滾動 Div 到末尾?
    如何在新增資料時自動捲動至Div 的結尾處理動態Web 內容時,通常希望讓div 等元素自動捲動到新增資料時的底部。這是聊天視窗或無限滾動資料表等元素的常見要求。 考慮這樣一個場景:您有一個表格包含在固定高度的 div 中,並且您希望它自動滾動到末尾當添加新資料時。本文探討了實作此行為的 JavaS...
    程式設計 發佈於2024-11-09
  • 如何使用 Laravel Eloquent 取得每個賣家的最新快照?
    如何使用 Laravel Eloquent 取得每個賣家的最新快照?
    用於選擇按賣家分組的最新行的雄辯查詢給定一個包含賣家相關資訊(包括created_at時間戳)的表,通常需要僅檢索每個賣家的最新條目。使用 Laravel Eloquent 可以有效地完成此任務。 為了實現這一目標,我們可以使用 MySQL 子查詢,該子查詢使用左連接和 NULL 匹配來標識每個 s...
    程式設計 發佈於2024-11-09
  • 如何去掉 Go 時間戳記中的「m」字尾?
    如何去掉 Go 時間戳記中的「m」字尾?
    如何在Go 時間戳中排除“m”指示符在Go 中,time.Now() 函數返回一個帶有尾隨“m”後綴表示單調時鐘讀數。對於不需要的特定用例,可以刪除此後綴。 「m」的意思「m」字尾表示掛鐘之間的距離和單調時鐘讀數,以十進位秒錶示。調整掛鐘以保持與外部來源的精確計時,同時單調時鐘穩定遞增而不中斷。 刪...
    程式設計 發佈於2024-11-09
  • 如何安裝和使用Django
    如何安裝和使用Django
    姜戈 Django 是免費開源用Python編寫的網路架構。它遵循模型-模板-視圖架構模式,並由Django 軟體基金會維護。它於 2005 年 7 月 21 日首次發布,並根據 3 條款 BSD 許可證獲得許可。 Django 以其快速開發和乾淨、務實的設計而聞名,使其成為建立 ...
    程式設計 發佈於2024-11-09
  • 有趣的彩色 Codepen
    有趣的彩色 Codepen
    嗨,身為設計師,色彩對我來說真的很重要。 在過去的兩年裡,我收集並創建了一些調色板。但這不是今天貼文的主題。 今天我想分享一些我製作的有趣的彩色筆。 我們走吧… (注意:其中一些可能在行動裝置上不相容。) 1. RGB 顏色滑桿 對此我能說什麼。首先,在我們進一步討論之前,我應...
    程式設計 發佈於2024-11-09
  • 為什麼我無法更改 IE8 中禁用的 HTML 控制項的文字顏色?
    為什麼我無法更改 IE8 中禁用的 HTML 控制項的文字顏色?
    IE8 中禁用的HTML 控制項的CSS 顏色變更問題在HTML 中,disabled 屬性停用輸入控制項,但它也會影響控制項這些控制項的外觀。大多數瀏覽器都支援使用 CSS 套用於停用控制項的自訂樣式。然而,Internet Explorer 8 (IE8) 在更改停用控制項的顏色方面提出了獨特的...
    程式設計 發佈於2024-11-09
  • React 中的純元件:釋放效能
    React 中的純元件:釋放效能
    在现代 React 开发中,性能通常是一个关键焦点,尤其是当应用程序变得越来越复杂时。优化性能最有效的方法之一是利用 React 中的纯组件。 Pure Components 提供强大的优化技术,减少不必要的重新渲染,并确保您的应用程序运行得更快、更流畅。在这篇博客中,我们将深入探讨纯组件是什么、何...
    程式設計 發佈於2024-11-09

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

Copyright© 2022 湘ICP备2022001581号-3