首頁 > Java > java教程 > 你該使用 Spring Boot 的 OpenSessionInView 嗎?

你該使用 Spring Boot 的 OpenSessionInView 嗎?

Patricia Arquette
發布: 2024-11-28 17:19:14
原創
489 人瀏覽過

Should You Use Spring Boot's OpenSessionInView?

OpenSessionInView:Spring Boot 中的一個警示故事

Spring Boot 中的spring.jpa.open-in-view 屬性已成為來源讓很多開發者感到困惑。讓我們深入研究一下它的用途、預設值和潛在後果。

什麼是 OpenSessionInView?

OpenSessionInView (OSIV) 是一項在整個請求期間使 EntityManagerFactory 保持開啟的功能-回應週期。這允許 Hibernate(底層持久化提供者)自動初始化延遲載入的實體,即使交易已提交。

預設值

在 Spring Boot 2.0 和之前,如果未明確設置,則預設啟用 OSIV。這主要是為了向後相容需要 OSIV 才能正常運作的舊 Hibernate 版本。

OSIV 的缺陷

雖然旨在簡化物件初始化,但OSIV 可能會導致顯著的結果效能問題和可擴展性限制:

  • 記憶體增加消耗: OSIV 在整個請求過程中使EntityManager和物件圖保持活動狀態,可能導致記憶體洩漏。
  • 並發事務衝突: OSIV 允許多個事務在同一個 EntityManager 上操作,導致潛在的衝突。
  • 資料庫連線開銷: 保持資料庫連線在其預期使用時間之外保持開啟狀態浪費資源並增加連線池爭用。

停用OSIV

要停用OSIV 並恢復正確的資源管理,請設定spring.jpa.open-in-view = false 在您的application .properties中file.

LazyInitializationException

如果停用 OSIV,則在存取延遲載入實體時可能會遇到 LazyInitializationException。若要解決此問題,請在 JPQL 查詢中使用 Hibernate 的 @Fetch 註解或明確急切取得。

結論

OpenSessionInView 似乎是避免延遲初始化異常的便利方法,但其潛在弊大於利。在現代 Spring Boot 應用程式中,應停用 OSIV 以確保最佳效能和資源利用率。

以上是你該使用 Spring Boot 的 OpenSessionInView 嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板