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

升级Zuul与Auth的JDBC驱动后Eureka服务启动异常

升级Oracle JDBC驱动至12.2.0.jre8后Eureka DiscoveryClient初始化失败的解决方案

问题现象

升级Zuul和Auth微服务的Oracle JDBC驱动到12.2.0.jre8版本后,Eureka客户端启动抛出如下异常,最终导致DiscoveryClient初始化失败:

Caused by: java.lang.RuntimeException: Failed to initialize DiscoveryClient!
        ...
Caused by: java.lang.RuntimeException: Cannot create Jersey client
        ...
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.internal.RuntimeDelegateImpl

根因分析

Oracle JDBC驱动12.2.0.jre8版本内置了JAX-RS 2.0的相关依赖(如javax.ws.rs-api),而Eureka客户端默认依赖的是Jersey 1.x(基于JAX-RS 1.1规范)。当驱动包中的JAX-RS 2.0类被优先加载时,RuntimeDelegate会尝试寻找JAX-RS 2.0的实现类org.glassfish.jersey.internal.RuntimeDelegateImpl,但该类并未被完整引入到项目依赖中,从而触发类找不到的异常。

解决方案

方案1:排除JDBC驱动中的JAX-RS相关依赖

通过构建工具(Maven/Gradle)排除Oracle驱动包中自带的JAX-RS及Jersey 2.x依赖,避免与Eureka的Jersey 1.x冲突:

Maven配置示例:

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.jre8</version>
    <exclusions>
        <exclusion>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-common</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Gradle配置示例:

implementation('com.oracle.database.jdbc:ojdbc8:12.2.0.jre8') {
    exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api'
    exclude group: 'org.glassfish.jersey.core', module: 'jersey-client'
    exclude group: 'org.glassfish.jersey.core', module: 'jersey-common'
}

方案2:强制引入JAX-RS 1.1依赖

显式添加JAX-RS 1.1的规范依赖,覆盖驱动包带来的JAX-RS 2.0版本,适配Eureka的Jersey 1.x:

Maven配置示例:

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
</dependency>

Gradle配置示例:

implementation 'javax.ws.rs:jsr311-api:1.1.1'

方案3:切换Eureka客户端的HTTP实现

将Eureka客户端的HTTP客户端从Jersey 1.x切换为RestClient(或OkHttp),彻底规避Jersey版本冲突:

  1. 修改配置文件:
# 启用RestClient作为Eureka HTTP客户端
eureka.client.httpClient.enabled=false
eureka.client.restClient.enabled=true
  1. 排除Jersey依赖(可选):
    如果项目中不需要Jersey 1.x,可以在Eureka客户端依赖中排除相关包:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:25:03