spring Boot 3 與 Druid 數據庫連接池的兼容性問題及解決方案
本文針對在 spring boot 3.0.5 環境下集成 Druid 1.2.16 數據庫連接池時遇到的監控頁面無法訪問的問題,提供詳細的分析和解決方法。 問題主要源于 Spring Boot 3 從 Java EE 遷移到 Jakarta EE,導致 Druid 的 StatViewservlet 和 WebStatFilter 無法正常工作。
直接使用 druid-spring-boot-starter 依賴并啟用 spring.datasource.druid.stat-view-servlet.enabled: true 在 Spring Boot 3 中并不總是有效,因為 Druid 的 Servlet 和 Filter 基于過時的 javax.servlet API。 javax.servlet 已被 jakarta.servlet 替代,導致兼容性問題。
簡單地添加 @ComponentScan(“com.alibaba.druid”) 也無法解決問題,反而會引發其他異常,例如找不到 org.springframework.boot.web.servlet.FilterRegistrationBean.setFilter(javax.servlet.Filter) 方法。這是因為 Spring Boot 3 中 FilterRegistrationBean 的 API 已經發生變化。
因此,傳統的基于 javax.servlet 的手動配置方法已不再適用。 解決方法需要從以下幾個方面入手:
-
檢查 Druid 版本: 確認當前 Druid 版本是否已針對 Spring Boot 3 和 Jakarta EE 做了兼容性更新。 查閱 Druid 的官方文檔和 issue 列表,尋找針對 Spring Boot 3 的解決方案或升級建議。
-
使用 Jakarta EE 兼容的配置方式: 尋找使用 jakarta.servlet API 的替代方案來配置 Druid 監控。這可能需要修改 Druid 的配置方式或使用其他的監控工具。
-
尋求社區支持: 在 Spring Boot 或 Druid 的社區論壇尋求幫助,分享遇到的問題和嘗試過的解決方案,以便獲得更有效的指導。
通過以上步驟,您可以有效解決 Spring Boot 3 與 Druid 數據庫連接池的兼容性問題,并成功訪問 Druid 的監控頁面。