启动服务器/触发流水线时OracleDriver加载失败求助
无法加载OracleDriver的问题排查
问题描述
启动服务器或触发流水线时抛出如下错误:
java.sql.SQLException: Unable to load class: oracle.jdbc.driver.OracleDriver from ClassLoader:java.net.URLClassLoader@545b995e;ClassLoader:java.net.URLClassLoader@545b995e
详细错误栈:
java.sql.SQLException: Unable to load class: oracle.jdbc.driver.OracleDriver from ClassLoader:java.net.URLClassLoader@545b995e;ClassLoader:java.net.URLClassLoader@545b995e at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:316) at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:228) at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:764) at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:692) at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:496) at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154) at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:121) at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:110) at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:560)
已做排查:Tomcat的lib目录原本缺少ojdbc包,最初pom.xml也无对应依赖,添加了scope为provided的ojdbc 8.0依赖后重新构建,问题仍存在。
可能的原因及解决方向
providedscope的依赖未被运行环境提供:provided表示依赖由运行环境(如Tomcat)提供,构建时不会将ojdbc包打入应用包。如果Tomcat的${CATALINA_HOME}/lib目录仍未手动放入ojdbc8.jar,运行时自然找不到驱动类。要么把scope改为compile让构建工具将包打入应用,要么手动将ojdbc8.jar放到Tomcat的lib目录。- ojdbc版本与Oracle数据库不兼容:ojdbc8对应Oracle 12c及以上版本,若数据库是11g或更低版本,会出现兼容性问题导致驱动加载失败。需匹配数据库版本选择驱动:Oracle 11g用ojdbc6,12c+用ojdbc8。
- 驱动类配置路径过时:Oracle 12c及以上推荐使用
oracle.jdbc.OracleDriver,旧的oracle.jdbc.driver.OracleDriver已被标记为过时,部分环境下无法正常加载,检查数据库连接配置中的driverClassName是否正确。 - 构建缓存未清理:Maven/Gradle的缓存可能保留了旧的依赖状态,导致新添加的依赖未生效。执行
mvn clean install(Maven)或gradle clean build(Gradle)清理缓存后重新构建。 - Tomcat类加载异常:若Tomcat lib目录下的ojdbc包损坏,或运行Tomcat的用户没有lib目录的读取权限,会导致类加载失败。重新下载ojdbc包替换,或调整目录权限后重启Tomcat。
- 流水线部署未生效:如果是流水线部署,可能构建后的包未正确上传到服务器,或Tomcat未重启导致新依赖未加载。确认部署包中是否包含ojdbc包(若scope为compile),或Tomcat lib目录已更新后重启服务。
内容的提问来源于stack exchange,提问作者Rashmi Sharma
相关产品推荐
相关产品推荐

