You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级spring-boot-starter-parent至2.6.14后JBOSS部署遇CannotGetJdbcConnectionException

升级Spring Boot Parent至2.6.14后JBOSS部署时Oracle驱动加载失败

问题现象

将spring-boot-starter-parent版本升级至2.6.14后,本地代码运行正常,但部署到JBOSS服务器时抛出如下异常:
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Unable to load class: oracle.jdbc.OracleDriver from ClassLoader:ModuleClassLoader for Module "deployment.xyz.war"

异常堆栈信息:

org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Unable to load class: oracle.jdbc.OracleDriver from ClassLoader:ModuleClassLoader for Module "deployment.xyz.war" from Service Module Loader;ClassLoader:ModuleClassLoader for Module "deployment.xyz.war" from Service Module Loader
2023-05-08 06:17:46,741 INFO  [stdout] (default task-1)         at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:83) ~[spring-jdbc-5.3.24.jar:5.3.24]
2023-05-08 06:17:46,741 INFO  [stdout] (default task-1)         at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:646) ~[spring-jdbc-5.3.24.jar:5.3.24]
2023-05-08 06:17:46,742 INFO  [stdout] (default task-1)         at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713) ~[spring-jdbc-5.3.24.jar:5.3.24]
2023-05-08 06:17:46,742 INFO  [stdout] (default task-1)         at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:744) ~[spring-jdbc-5.3.24.jar:5.3.24]
2023-05-08 06:17:46,742 INFO  [stdout] (default task-1)         at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:757) ~[spring-jdbc-5.3.24.jar:5.3.24]

环境信息

  • Java版本:1.8.0_222
  • JBOSS版本:7.2
  • spring-jdbc版本:spring-jdbc-5.3.24

解决方案

1. 检查Oracle驱动依赖配置

确保项目中ojdbc依赖未被设置为provided(若需将驱动打包到war包中),Maven依赖示例:

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>19.3.0.0</version>
    <!-- 若依赖设为provided,需确保JBOSS模块中已配置驱动 -->
</dependency>

2. 配置JBOSS模块引用(驱动放在JBOSS模块时)

如果Oracle驱动部署在JBOSS的模块目录中,需在项目WEB-INF/jboss-deployment-structure.xml中添加模块依赖:

<jboss-deployment-structure>
    <deployment>
        <dependencies>
            <module name="com.oracle.ojdbc" slot="main"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

同时确保JBOSS的modules/com/oracle/ojdbc/main目录下存在驱动jar和module.xml,module.xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle.ojdbc">
    <resources>
        <resource-root path="ojdbc8.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

3. 调整类加载策略

在项目的application.properties中明确指定驱动类名:

spring.jdbc.driver-class-name=oracle.jdbc.OracleDriver

若仍有问题,可在WEB-INF/jboss-web.xml中设置类加载优先级:

<jboss-web>
    <class-loading>
        <class-loader>
            <priority>1</priority>
        </class-loader>
    </class-loading>
</jboss-web>

4. 确认驱动类名正确性

Oracle 11g及更早版本驱动类名为oracle.jdbc.driver.OracleDriver,12c及以上版本为oracle.jdbc.OracleDriver,需根据使用的驱动版本匹配正确的类名。

内容的提问来源于stack exchange,提问作者Saqib Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:43