Spring Boot集成Apache Derby报错:无法加载EmbeddedDriver驱动类
核心问题分析
你遇到的Cannot load driver class: org.apache.derby.jdbc.EmbeddedDriver错误,主要和依赖范围、模块化兼容性、冗余配置相关,结合Spring Boot 3.4.2 + Java 23的环境,具体修复方案如下:
1. 调整依赖范围与引入方式
将derby和derbytools设为runtime依赖,在Java 23的模块化环境下可能无法被Spring Boot类加载器正确扫描。推荐直接使用Spring Boot的starter依赖自动管理版本与依赖关系,确保驱动类能被正常加载:
修正后的pom.xml配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.apache.derby</groupId> <artifactId>derbytools</artifactId> <scope>runtime</scope> </dependency>
2. 移除冗余的驱动类配置
Spring Boot 3.x会根据JDBC URL自动推断对应驱动类,手动指定org.apache.derby.jdbc.EmbeddedDriver反而可能触发模块化类加载问题。删除spring.datasource.driver-class-name配置项即可:
修正后的application.yaml配置:
spring: datasource: url: jdbc:derby:myDerbyDB;create=true jpa: hibernate: ddl-auto: update # 根据业务需求调整 show-sql: true properties: hibernate: dialect: org.hibernate.dialect.DerbyDialect
3. 适配Java 23模块化规则
Java 23启用了严格的模块化校验,若你的项目是模块化结构,需要在module-info.java中声明Derby模块依赖:
requires org.apache.derby.commons; requires org.apache.derby.jdbc;
若为非模块化项目(多数Spring Boot项目默认),可在启动参数中添加--add-modules org.apache.derby.jdbc,强制将Derby模块纳入类路径。
4. 排查依赖冲突
执行mvn dependency:tree命令,检查derby和derbytools的版本是否与Spring Boot自动管理的版本(10.16.1.1)一致,若存在版本冲突,手动排除冲突依赖即可。
验证步骤
完成调整后重启应用:
- 查看控制台是否出现Derby初始化日志(如
Created database 'myDerbyDB') - 验证JPA实体是否能正常映射至Derby数据库
内容的提问来源于stack exchange,提问作者KCK

