首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring JDBC 報錯 NoClassDefFoundError: PooledObjectFactory 解決:補全 commons-pool2 依賴

     編輯:程式設計綜合問答

錯誤堆疊

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao': Injection of resource dependencies failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory

原因分析

專案使用 org.apache.commons.dbcp2.BasicDataSource 作為連接池,DBCP2 內部依賴 commons-pool2,但專案類路徑缺少該 JAR,導致 Spring 初始化 DataSource 時找不到類,進而注入 userDao 失敗。

解決方案

Maven 專案(推薦)

在 pom.xml 添加依賴:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.11.1</version>  <!-- 查詢最新穩定版 -->
</dependency>

執行 mvn clean compile 或 IDE 重新導入 Maven 專案。

非 Maven 專案

  1. 下載 commons-pool2-2.x.jar(Maven Central 搜尋)。
  2. 放入專案 WEB-INF/lib 或構建路徑庫中。

驗證

  • 重新啟動應用,Spring 容器啟動無錯誤。
  • userDao 成功注入 JdbcTemplate,資料庫操作正常。

舉一反三

  • NoClassDefFoundError 多為運行時缺少依賴,檢查 mvn dependency:tree 確認傳遞依賴是否被排除。
  • DBCP2 升級版本時,commons-pool2 版本需匹配,查閱 DBCP 釋出說明。

補全缺失依賴,Spring JDBC 連接池即可正常工作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved