知識庫 / Spring / Spring Boot RSS 訂閱

使用 IntelliJ IDEA 調試 Spring Boot 應用

IDE,Spring Boot
HongKong
5
10:40 AM · Dec 06 ,2025

1. 簡介

Spring Boot 使得通過包含少量依賴項和最小配置,輕鬆創建強大的應用程序。只需幾行代碼,我們就可以設置 HTTP 端點、連接到數據庫以及處理事件。這感覺就像魔法——直到出現問題。

當問題出現時,調試就變得至關重要。但是,理解 Spring Boot 應用程序背後的運行機制可能會很棘手。配置值可能來自多個來源,Bean 可能會在條件下加載,事務問題也難以定位。

在解決問題時,我們是否經常會問自己以下問題:

  • 實際使用的屬性值是什麼?
  • 哪個 Bean 被注入了?
  • 當前事務是否處於活動狀態?
  • 應用程序連接到哪個數據庫?

在本教程中,我們將探索 Spring 調試器 插件如何為 IntelliJ IDEA 添加 Spring 相關的見解,並簡化應用程序的故障排除。

2. 使用 Spring Debugger 入門

Spring Debugger 不需要進行任何特殊配置,只需安裝插件並以 調試 模式運行應用程序。

它支持以下運行配置類型:

  • Native IntelliJ IDEA Spring Boot
  • Maven spring-boot:run 命令
  • Gradle bootRun 任務
  • 遠程附加目前不受支持(截至 2025 年 8 月)

該插件與 IDE 內置的調試器 API 集成,無需使用 Spring Boot Actuator 或其他額外的庫或代理即可工作。

安裝後,我們就可以立即開始使用其所有功能,以探索在運行時應用程序內部發生的情況,從 Bean 開始。

3. 查看運行時加載的 Bean

當開始調試 Spring 應用時,首要問題是:哪些 Bean 實際被加載了?

Spring Debugger 會為 Project 視圖添加 Bean 級別的圖標(根據 Bean 類型區分)

如示例所示,我們有:

  • 綠色表示已加載的 Bean
  • 灰色表示已掃描但未加載的 Bean
  • 橙色表示模擬的 Bean

這個視覺反饋在測試或多個實現方案可用時尤其有用。 我們還可以從當前應用程序上下文評估任何 Spring Bean。 在 Evaluate Expression 窗口中,自動補全功能可以幫助我們直接調用 Bean 中的方法——無需修改代碼或重啓。

一旦我們知道哪些 Bean 被加載了,下一個挑戰通常是找出應用程序的行為與預期不符的原因——這通常與配置有關。

4. 確定任何屬性的真實值

屬性有時不會表現出預期的行為——它們的取值可能取決於活動配置文件以及它們的應用程序順序,也可能來自外部源,例如環境變量或配置服務。

Spring Debugger 在配置文件的內聯顯示 有效屬性值。 單擊它會導航到提供該值的源,無論它是否為文件或 Java 代碼:

在調試會話期間,我們可以通過 評估表達式 窗口來評估屬性。 在這種情況下,我們不僅可以看到值,還可以看到其來源,調試器還會顯示該值是如何更新的堆棧跟蹤。

對於環境變量、系統設置或配置服務器,即使無法導航,IDE 也會提供清晰的來源描述:


確認配置正確後,故障排除中常見的另一個步驟是確保應用程序連接到正確的數據庫。

5. 立即檢查數據庫連接

在運行集成測試時,可能並不清楚應用程序連接到哪個數據庫——尤其是在使用諸如 Testcontainers 之類的工具時,因為端口和憑據可能會發生變化。

Spring Debugger 與數據庫工具窗口集成,可在運行時顯示活動連接。我們可以探索連接的容器或獨立數據庫中的數據,而無需猜測連接字符串或掃描日誌:

對於內存數據庫,Spring Debugger 顯示連接,但無法顯示模式或數據,因為這些數據庫僅存在於應用程序進程內部,並且無法通過 IDE 的 JDBC 驅動程序訪問,除非有專門的端點。在這種情況下,我們可以暫停應用程序並使用 Bean(例如,Repository、EntityManager)或直接獲取連接對象來執行 SQL 或 JPQL 查詢。

即使數據庫連接正確,也可能由於事務處理問題而出現問題——這些問題可能更難診斷。

6. 診斷事務問題

常見的 Spring 錯誤是 LazyInitializationException,這通常發生在我們在非活動事務中訪問 JPA 實體時。

在調試過程中,Spring Debugger 顯示了活動事務及其元數據,包括其是否活動、傳播類型以及啓動位置:

對於 JPA,它還會顯示 L1 緩存中加載的實體,並在我們逐行執行代碼時進行更新。 通過這些信息,我們可以清楚地看到事務邊界並發現違規情況。

如果事務處於活動狀態但數據仍然沒有正確持久化或加載,我們可以檢查實體的狀態。

7. 檢查 JPA 實體狀態

在 JPA 中,實體狀態至關重要。一個實體是管理狀態、分離狀態還是已刪除,都會影響級聯操作、刷新操作和持久化上下文的行為。

Spring Debugger 可以直接在調試器中顯示實體的生命週期狀態。 在任何斷點處,我們可以確認實體是否附加到當前會話中:

此信息有助於在服務層調試與持久化相關的故障,尤其是在實體在服務之間傳遞時。

通過結合所有這些功能—— Bean 檢查、屬性跟蹤、數據庫連接檢查、事務元數據和實體狀態,我們可以全面瞭解應用程序在運行時所發生的情況。

8. 結論

本文介紹了調試 Spring Boot 經常涉及的問題,包括配置、依賴注入、事務和持久化等方面。

Spring Debugger 插件將這些答案直接集成到調試器和編輯器中:

  • 立即查看已加載的 Bean 以及它們的狀態
  • 從應用程序上下文調用任何 Bean
  • 追蹤任何屬性值的真實來源
  • 無需猜測地查看活動數據庫連接
  • 一目瞭然地檢查事務和實體狀態

Spring Debugger 插件作為獨立插件提供,而非與 IntelliJ IDEA 捆綁(目前)。 這樣做是因為插件開發者不希望依賴 IntelliJ IDEA 的發佈週期,而是可以根據需要獨立更新插件。

藉助 Spring Debugger,運行時洞察力成為我們日常調試流程的一部分。 我們無需在日誌、配置和數據庫工具之間切換,才能瞭解發生了什麼。 我們需要的全部內容——從 Bean 狀態到事務詳情——都位於 IDE 中,幫助我們更快地解決問題。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.