Spring Boot执行JUnit测试时出现AbstractJdbcConfiguration错误
JUnit测试Repository时出现NoClassDefFoundError的解决方法
问题场景
我有一个Maven父项目,下含处理用户活动的子项目,尝试用JUnit测试Repository时,抛出错误:java.lang.NoClassDefFoundError: org/springframework/data/jdbc/repository/config/AbstractJdbcConfiguration
父项目pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.testpr</groupId> <artifactId>testprWebParent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>testprWebParent</name> <description>parent testpr web parent</description> <properties> <java.version>19</java.version> </properties> <modules> <module>testprBackEnd</module> <module>testprFrontEnd</module> </modules> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>bootstrap</artifactId> <version>5.2.3</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.6.1</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator-core</artifactId> </dependency> <dependency> <groupId>com.testprcommon</groupId> <artifactId>testprCommon</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
子项目pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.testpr</groupId> <artifactId>testprWebParent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>testprBackEnd</artifactId> <name>testprBackEnd</name> <description>testpr Admin Project</description> <properties> <java.version>19</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>com.github.librepdf</groupId> <artifactId>openpdf</artifactId> <version>1.3.30</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
问题原因
测试环境缺少Spring Data JDBC相关依赖。虽然父项目引入了spring-boot-starter-data-jpa,但测试场景下可能存在依赖传递不完整,或是测试配置误触发了JDBC相关类的加载,导致找不到AbstractJdbcConfiguration。
解决步骤
- 补充Spring Data JDBC测试依赖
在父项目或子项目的<dependencies>中添加测试范围的JDBC starter依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> <scope>test</scope> </dependency>
如果你的Repository是基于JPA实现,也需检查测试类是否误引入了JDBC相关注解(比如@DataJdbcTest),这类注解会触发JDBC配置加载。
- 清理并重新构建Maven依赖
在Eclipse中执行以下操作:
- 右键父项目 → Maven → Update Project,勾选"Force Update of Snapshots/Releases"
- 右键子项目 → Run As → Maven Clean
- 右键子项目 → Run As → Maven Install
- 修正测试类注解
确保测试类使用正确的Spring Boot测试注解,比如JPA Repository测试用@DataJpaTest:
@SpringBootTest @DataJpaTest public class YourRepositoryTest { // 测试代码 }
内容的提问来源于stack exchange,提问作者Ahad Porkar
相关产品推荐
相关产品推荐

