首頁  >  文章  >  Java  >  提高 Spring Boot 應用程式的效能 - 第二部分

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

PHPz
PHPz原創
2024-08-28 06:35:06530瀏覽

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:


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=none
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.connection.provider_disables_autocommit=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在視圖中開啟會話)時,在整個請求過程中都會維護會話,即使沒有@Transactional註釋。這可能會導致效能問題,例如缺乏應用程式回應,因為會話會保持與資料庫的連線直到請求結束。

  • spring.datasource.jpa.show-sql:顯示應用程式中正在執行的 SQL 日誌。我們通常在開發中啟用它,但在生產中會停用它。

  • spring.datasource.jpa.hibernate.ddl-auto:設定 Hibernate 與資料庫 schema 相關的行為。它可以具有以下值:

    • 無:不執行任何操作。我們手動管理銀行的架構。
    • validate:驗證資料庫架構,但不進行任何變更。這對於確保當前模式與我們映射的實體一致很有用。
    • 更新:更新資料庫架構以反映實體的變更。
    • 建立:建立資料庫架構。如果模式已經存在,它將刪除並重新建立它。
    • create-drop:從資料庫建立模式,並在應用程式結束時刪除模式。對於測試很有用,我們希望每次測試都有一個乾淨的資料庫。
  • spring.jpa.properties.hibernate.generate_statistics:用於收集有關 Hibernate 的詳細信息,例如查詢執行時間、執行的查詢數量和其他指標。

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit:通知Hibernate我們已停用Hibernate我們已停用Hibernate我們已停用提供者的提交PostgreSQLMySQL等)。這會影響效能,因為 Hibernate 需要從

  • 取得連線才能知道
自動提交

是否啟用。 .,對於他所做的每筆交易。 至此,我們結束了文章的第二部分。並非所有設定都與性能有關,但真正影響的是Hikari 設置,例如自動提交池大小 JPAHibernate 的那些,如OSIV在視圖中開啟會話OSIV

在視圖中開啟會話)並通知您我們已停用來自提供者自動提交

在下一部分中,我們將討論異常以及如何配置它們,以節省
    JVM
  • Java 虛擬機
  • )資源。
  • 參考資料:
  • 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

以上是提高 Spring Boot 應用程式的效能 - 第二部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn