oracle.jdbc.driver.OracleDriver 类在 ojdbc7 及之后版本中已被 Oracle 官方废弃,统一替换为 oracle.jdbc.OracleDriver;Spring Boot 2.4+ 和 3.x 仅识别新类名,旧配置必然触发 ClassNotFoundException。
为什么 oracle.jdbc.driver.OracleDriver 会报 ClassNotFoundException
不是代码写错了,而是这个类在 ojdbc6 之后的版本里根本不存在了。从 ojdbc7 开始,oracle 官方废弃了 oracle.jdbc.driver.oracledriver(带 driver 包路径的老式类),统一改用 oracle.jdbc.oracledriver(顶层包)。spring boot 2.4+ 和所有 spring boot 3.x 默认只认新类名,旧配置必然失败。
常见错误现象包括:
Failed to load driver class oracle.jdbc.driver.OracleDriverRegistered driver with driverClassName=... was not found, trying direct instantiation- 应用启动卡在数据源初始化,日志末尾停在 HikariCP 初始化阶段
根本原因不是“没加依赖”,而是:驱动 JAR 没进 classpath,或类名配错,或版本不匹配——三者常同时发生。
怎么把 ojdbc 正确装进 Maven 本地仓库
Maven 中央仓库不托管 Oracle 驱动(授权限制),必须手动安装。别再复制 jar 到 lib/ 或改 IDEA Module Settings——这些方式在 mvn package 后运行 java -jar 时必然失效。
正确做法是执行 mvn install:install-file 命令,确保它出现在 ~/.m2/repository/com/oracle/database/jdbc/ 下(注意 groupId 变更):
mvn install:install-file \ -Dfile=ojdbc8.jar \ -DgroupId=com.oracle.database.jdbc \ -DartifactId=ojdbc8 \ -Dversion=21.10.0.0 \ -Dpackaging=jar \ -DgeneratePom=true
关键点:
- 务必使用
com.oracle.database.jdbc作为groupId(Spring Boot 2.5+ 和 3.x 官方推荐,兼容性最好) - 不要用过时的
com.oracle:ojdbc6—— 这类坐标在 Spring Boot 3 中无法被自动识别为 JDBC 驱动提供者 - 下载 ojdbc8 或 ojdbc11(对应 Oracle 12c/19c/21c),避免用 ojdbc6(仅支持 JDK 6–7,且无模块化支持)
- 检查 jar 包内是否存在
META-INF/services/java.sql.Driver文件,里面必须包含oracle.jdbc.OracleDriver—— 这是 JDBC SPI 自动发现机制依赖的
application.yml 中 driver-class-name 怎么配才不踩坑
Spring Boot 3.x 要求显式声明驱动类,且只接受新路径。即使你用了最新 ojdbc8,如果还写 oracle.jdbc.driver.OracleDriver,照样启动失败。
正确配置(YAML 格式,注意冒号后必须有空格):
spring:
datasource:
url: jdbc:oracle:thin:@//192.168.1.100:1521/ORCLPDB1
username: scott
password: tiger
driver-class-name: oracle.jdbc.OracleDriver
补充说明:
-
url推荐用//host:port/SERVICE_NAME格式(Easy Connect Plus),比老式(DESCRIPTION=...)更简洁、易读、少出错 - Spring Boot 3.2+ 默认启用 JDBC Driver auto-registration,但前提是 JAR 包里有正确的
java.sql.DriverSPI 文件 —— 手动安装时若漏掉-DgeneratePom=true,可能破坏该机制 - 如果项目同时连多个数据库(如 Oracle + PostgreSQL),请确认
driver-class-name是针对当前datasource的,别全局覆盖
打包后 java -jar 运行仍找不到驱动?检查这三点
很多人本地 IDEA 跑通了,一打包就失败。核心矛盾在于:Maven 插件默认不会把 scope=compile 的第三方非中央仓库依赖(比如你手动 install 的 ojdbc8)打进 fat jar。
解决方案只有两个有效路径:
- 确认
spring-boot-maven-plugin配置中<includes></includes>或<dependencies></dependencies>没过滤掉com.oracle.database.jdbc相关 artifact - 在 pom.xml 中给 ojdbc 依赖显式加上
<scope>runtime</scope>(不是compile)—— 这能触发 Spring Boot 插件将其纳入 fat jar - 运行时加
-Dloader.path指定外部驱动目录(不推荐,运维负担重;仅用于临时验证)
最容易被忽略的是:Spring Boot 3 默认使用 org.springframework.boot:spring-boot-loader 加载机制,它对 META-INF/MANIFEST.MF 中的 Class-Path 条目不敏感——所以别指望靠改 MANIFEST 来补驱动。











