NoSuchMethodError Couchbase 2.5.8 Spring 引导启动错误

NoSuchMethodError Couchbase 2.5.8 Spring Boot Startup Error

我们在 Spring 启动应用程序(微服务)中使用了 Couchbase DB,它在 PCF 启动和应用程序崩溃期间给出了 NoSuchMethodError

使用的Couchbase SDK是2.5.8

            <dependency>
                <groupId>com.couchbase.client</groupId>
                <artifactId>java-client</artifactId>
                <version>2.5.8</version>
            </dependency>

RxJava 版本为 1.1.10 .

使用以下代码创建 CouchbaseEnvironment

            CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder()
            .sslEnabled(true).bootstrapHttpSslPort(18091)
            .sslKeystoreFile(Preconditions.checkNotNull(environment.getProperty("couchbase.ssl.keystore")))
            .sslKeystorePassword(Preconditions.checkNotNull(environment.getProperty("couchbase.ssl.keystore.password")))
            .connectTimeout(50000)
            .kvTimeout(50000)
            .build();

我们得到的异常如下

            2018-05-18T16:02:56.889+05:30 [APP/PROC/WEB/0] [OUT] Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.couchbase.client.java.env.DefaultCouchbaseEnvironment]: Factory method 'couchbaseEnvironment' threw exception; nested exception is java.lang.NoSuchMethodError: com.couchbase.client.java.env.DefaultCouchbaseEnvironment$Builder.kvEndpoints(I)Lcom/couchbase/client/java/env/DefaultCouchbaseEnvironment$Builder;
            2018-05-18T16:02:56.889+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
            2018-05-18T16:02:56.889+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.12.RELEASE.jar!/:4.3.12.RELEASE]
            2018-05-18T16:02:56.889+05:30 [APP/PROC/WEB/0] [OUT] ... 26 common frames omitted
            2018-05-18T16:02:56.889+05:30 [APP/PROC/WEB/0] [OUT] Caused by: java.lang.NoSuchMethodError: com.couchbase.client.java.env.DefaultCouchbaseEnvironment$Builder.kvEndpoints(I)Lcom/couchbase/client/java/env/DefaultCouchbaseEnvironment$Builder;
            2018-05-18T16:02:56.889+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration$CouchbaseConfiguration.initializeEnvironmentBuilder(CouchbaseAutoConfiguration.java:102) ~[spring-boot-autoconfigure-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]
            2018-05-18T16:02:56.889+05:30 [APP/PROC/WEB/0] [OUT] at org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration$CouchbaseConfiguration.couchbaseEnvironment(CouchbaseAutoConfiguration.java:64) ~[spring-boot-autoconfigure-1.5.8.RELEASE.jar!/:1.5.8.RELEASE]

尝试使用 Spring 引导中可用的依赖项,但随后出现超时异常。

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-couchbase</artifactId>
            </dependency>

Couchbase 存储桶在 PCF 中创建为服务并绑定到服务。

            [org/springframework/boot/autoconfigure/couchbase/CouchbaseAutoConfiguration$CouchbaseConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.couchbase.client.java.Bucket]: Factory method 'couchbaseClient' threw exception; nested exception is java.lang.RuntimeException: java.util.concurrent.TimeoutException
            2018-05-18T12:46:22.497+05:30 [APP/PROC/WEB/0] [OUT] 2018-May-18 07:16:22.496 WARN [cb-io-1-1] c.c.c.c.e.Endpoint - [null][KeyValueEndpoint]: Generic Failure.
            2018-05-18T12:46:22.505+05:30 [APP/PROC/WEB/0] [OUT] 2018-May-18 07:16:22.504 WARN [cb-io-1-1] c.c.c.c.e.Endpoint - null
            2018-05-18T12:46:22.520+05:30 [APP/PROC/WEB/0] [OUT] 2018-May-18 07:16:22.519 WARN [cb-io-1-1] c.c.c.d.i.n.u.c.DefaultPromise - An exception was thrown by com.couchbase.client.core.endpoint.AbstractEndpoint.operationComplete()

非常感谢任何帮助。

您可能还需要将 core-io 升级到 1.5.6 或更高版本。

<dependency>
    <groupId>com.couchbase.client</groupId>
    <artifactId>core-io</artifactId>
    <version>1.5.8</version>
</dependency>

NoSuchMethodError 被抛出,因为 this change 已提交。

另请参阅: https://issues.couchbase.com/browse/JVMCBC-495

此问题是由于 Spring 云依赖项造成的。我们组织的 PCF 升级到最新版本的 Spring Cloud Dependencies,我升级到最新版本后它运行良好

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RC2</spring-cloud.version>
    </properties>

之前我用的是以下版本

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Dalston.SR4</spring-cloud.version>
    </properties>

一旦我更新了这些依赖项,它就开始工作了。