首頁> Java> java教程> 主體

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

PHPz
發布: 2024-08-28 06:35:06
原創
375 人瀏覽過

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

在本文的第一部分中,我們學習瞭如何提高應用程式的效能,除了啟用和設定資料壓縮之外,還使用高效能Web 伺服器Undertow取代Tomcat,減少透過網路傳輸的HTTP響應的大小。

現在,我們將在持久化部分討論如何提高 Spring Boot 應用程式效能,但首先我們需要了解什麼是JPAHibernateHikari

日本PA

JPA 或Java Persistence API,後來更名為Jakarta Persistence,是一種 Java 語言標準,描述了資料持久化frameworks的通用介面。

JPA 規範在內部定義了物件關係映射,而不是依賴特定於供應商的映射實作。

休眠

HibernateORMHibernateORM框架之一,它使JPA規範具體實現,也就是說,如果在這個規範中描述了需要方法persistfetch data,真正建構這些行為的是Hibernate,以及EclipseLink,這是另一個ORM

,這是另一個

ORMHikari是一個連接池

框架,它負責管理與資料庫的連接,保持它們打開以便可以重用,換句話說,它是一個連接的

快取

,用於請求未來的連接,使資料庫存取速度更快並減少建立的新連線數量。

設定 Hikari、JPA 和 Hibernate


我們可能為提高效能而執行的配置如下:

使用application.yml:

雷雷

使用 application.properties:

雷雷

現在讓我們簡單總結一下選項:
  • spring.datasource.hikari.auto-commit:如果為 false,連接池

    回傳的每個連線都會停用
  • 自動提交
  • spring.datasource.hikari.connection-timeout:客戶端等待來自
  • 的連接的時間(以毫秒為單位)。最好設定一個較短的超時以快速失敗並傳回錯誤訊息,而不是讓客戶端無限期地等待。

  • spring.datasource.hikari.max-lifetime:連線可以保持活動狀態的最長時間。配置此參數對於避免因有問題的連線而導致失敗並提高安全性至關重要,因為長時間處於活動狀態的連線更容易受到攻擊。

    spring.datasource.hikari.maximum-pool-size:pool的最大大小,包括空閒和使用中的連接,決定資料庫的最大活動連接數。如果池達到此限制且沒有空閒連接,則對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: User-defined name for the connectionpooland appears primarily in registry management consoles andJMXto identifypoolsand their configurations.

JPA

  • spring.datasource.jpa.open-in-view: WhenOSIV(Open Session In View) is enabled, a session is maintained throughout the request, even without the @Transactional annotation. This can cause performance problems, such as lack of application responses, as the session maintains the connection to the database until the end of the request.

  • spring.datasource.jpa.show-sql: Displays the SQL logging that is being executed in our application. We usually leave it enabled in development, but disabled in production.

  • spring.datasource.jpa.hibernate.ddl-auto: Configures the behavior ofHibernatein relation to the databaseschema. It can have the following values:

    • none: Does nothing. We manually manage the bank schema.
    • validate: Validates the databaseschema, but makes no changes. This is useful to ensure that the currentschemaagrees with the entities we have mapped.
    • update: Updates the databaseschemato reflect changes in entities.
    • create: Creates the databaseschema. If theschemaalready exists, it will remove and create again.
    • create-drop: Creates theschemafrom the database and, when the application is finished, removes theschema. Useful for testing, where we want a clean database with each test.
  • spring.jpa.properties.hibernate.generate_statistics: Serves to collect detailed information about Hibernate, such as query execution times, number of queries executed, and other metrics.

  • spring.jpa.properties.hibernate.connection.provider_disables_autocommit: InformsHibernatethat we have disabled theauto-commitof theproviders(PostgreSQL,MySQL, etc). This impacts performance, becauseHibernatewill need to get a connection from thepoolto know whetherauto-commitis enabled or not, for every transaction it makes.

With this, we close the second part of the article. Not all the settings present were about performance, but the ones that really impact are theHikarisettings likeauto-commitandpool size, theJPAandHibernatesettings likeOSIV(Open Session In View) and inform you that we have disabled theauto-commitof theproviders.

In the next part we will talk about exceptions and how they can be configured, to save resources of theJVM(Java Virtual Machine).

References:

  • 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!