程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在 Groovy 中使用 ElasticSearch 的 Spring Boot:WebClient 不存在异常大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在 Groovy 中使用 ElasticSearch 的 Spring Boot:WebClient 不存在异常?

开发过程中遇到在 Groovy 中使用 ElasticSearch 的 Spring Boot:WebClient 不存在异常的问题如何解决?下面主要结合日常开发的经验,给出你关于在 Groovy 中使用 ElasticSearch 的 Spring Boot:WebClient 不存在异常的解决方法建议,希望对你解决在 Groovy 中使用 ElasticSearch 的 Spring Boot:WebClient 不存在异常有所启发或帮助;

我正在运行一个小型演示 spring-boot 应用程序,我想将我的 url 路由与 elasticsearch 查询连接起来。该应用程序可以通过这些 gradle 依赖项正常启动:

implementation('org.springframework.data:spring-data-elasticsearch')
implementation('org.elasticsearch:elasticsearch')
implementation('org.elasticsearch.clIEnt:elasticsearch-rest-high-level-clIEnt')
implementation('org.springframework.boot:spring-boot-starter-web')
implementation('org.codehaus.groovy:groovy')

一旦我添加了类 ElasticsearchClIEntConfig(我还没有使用过,刚刚加载):

package me.spring.GroovyDemo.store

import me.spring.GroovyDemo.AppConstants
import org.elasticsearch.clIEnt.RestHighLevelClIEnt
import org.springframework.context.Annotation.bean
import org.springframework.context.Annotation.ComponentScan
import org.springframework.context.Annotation.Configuration
import org.springframework.data.elasticsearch.clIEnt.ClIEntConfiguration
import org.springframework.data.elasticsearch.clIEnt.RestClIEnts
import org.springframework.data.elasticsearch.core.ElasticsearchOperations
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositorIEs

@Configuration
@EnableElasticsearchRepositorIEs(basePackages = "me.spring.GroovyDemo")
@ComponentScan(basePackages = ["me.spring.GroovyDemo"])
class ElasticsearchClIEntConfig {
    @Bean
    RestHighLevelClIEnt clIEnt() {
        ClIEntConfiguration clIEntConfiguration
                = ClIEntConfiguration.builder()
                .connectedTo(AppConstants.ELASTIC_SERVER)
                .build()

        return RestClIEnts.create(clIEntConfiguration).rest()
    }

    @Bean
    ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchRestTemplate(clIEnt())
    }
}

应用程序在启动时失败。 我发现了很多类似的问题。但是它们似乎都没有因缺少 WebclIEnt 而失败。我真的不明白我首先需要一个 WebClIEnt。 例外情况如下:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__,| / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.0)

2021-05-27 12:02:32.598  INFO 4462 --- [           main] m.s.GroovyDemo.GroovyDemoApplication     : StarTing GroovyDemoApplication using Java 1.8.0_292 on vagrant-VirtualBox with PID 4462 (/home/vagrant/GroovyOpenApI/Out/production/classes started by vagrant in /home/vagrant/GroovyOpenAPI)
2021-05-27 12:02:32.600  INFO 4462 --- [           main] m.s.GroovyDemo.GroovyDemoApplication     : No active profile set,falling BACk to default profiles: default
2021-05-27 12:02:32.890  WARN 4462 --- [kground-preinit] o.s.h.c.j.Jackson2ObjectMapperBuilder    : For Jackson Kotlin classes support please add "com.fasterxml.jackson.module:jackson-module-kotlin" to the classpath
2021-05-27 12:02:33.230  INFO 4462 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : bootstrapPing Spring Data Elasticsearch repositorIEs in DEFAulT mode.
2021-05-27 12:02:33.240  INFO 4462 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scAnning in 6 ms. Found 0 Elasticsearch repository interfaces.
2021-05-27 12:02:33.402  INFO 4462 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : bootstrapPing Spring Data Elasticsearch repositorIEs in DEFAulT mode.
2021-05-27 12:02:33.404  INFO 4462 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scAnning in 1 ms. Found 0 Elasticsearch repository interfaces.
2021-05-27 12:02:33.407  INFO 4462 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : bootstrapPing Spring Data Reactive Elasticsearch repositorIEs in DEFAulT mode.
2021-05-27 12:02:33.409  INFO 4462 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scAnning in 1 ms. Found 0 Reactive Elasticsearch repository interfaces.
2021-05-27 12:02:33.799  INFO 4462 --- [           main] o.s.b.w.embedded.tomcat.tomcatWebServer  : tomcat initialized with port(s): 8080 (http)
2021-05-27 12:02:33.807  INFO 4462 --- [           main] o.apache.catalina.core.Standardservice   : StarTing service [tomcat]
2021-05-27 12:02:33.807  INFO 4462 --- [           main] org.apache.catalina.core.StandardENGIne  : StarTing Servlet ENGIne: [Apache tomcat/9.0.46]
2021-05-27 12:02:33.861  INFO 4462 --- [           main] o.a.c.c.C.[tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2021-05-27 12:02:33.861  INFO 4462 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1065 ms
2021-05-27 12:02:34.035  WARN 4462 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.beanCreationException: Error creaTing bean with name 'clIEnt' defined in class path resource [me/spring/GroovyDemo/store/ElasticsearchClIEntConfig.class]: Bean instantiation via factory method Failed; nested exception is org.springframework.beans.beanInstantiationException: Failed to instantiate [org.elasticsearch.clIEnt.RestHighLevelClIEnt]: Factory method 'clIEnt' threw exception; nested exception is java.lang.TypeNotPresentexception: Type org.springframework.web.reactive.function.clIEnt.WebClIEnt not present
2021-05-27 12:02:34.038  INFO 4462 --- [           main] o.apache.catalina.core.Standardservice   : StopPing service [tomcat]
2021-05-27 12:02:34.054  INFO 4462 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starTing ApplicationContext. To display the conditions report re-run your application with 'deBUG' enabled.
2021-05-27 12:02:34.078 ERROR 4462 --- [           main] o.s.boot.SpringApplication               : Application run Failed

org.springframework.beans.factory.beanCreationException: Error creaTing bean with name 'clIEnt' defined in class path resource [me/spring/GroovyDemo/store/ElasticsearchClIEntConfig.class]: Bean instantiation via factory method Failed; nested exception is org.springframework.beans.beanInstantiationException: Failed to instantiate [org.elasticsearch.clIEnt.RestHighLevelClIEnt]: Factory method 'clIEnt' threw exception; nested exception is java.lang.TypeNotPresentexception: Type org.springframework.web.reactive.function.clIEnt.WebClIEnt not present
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactorymethod(ConstructorResolver.java:486) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.instantiateUsingFactorymethod(AbstractautowireCapablebeanfactory.java:1334) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.createBeanInstance(AbstractautowireCapablebeanfactory.java:1177) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.doCreateBean(AbstractautowireCapablebeanfactory.java:564) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.AbstractautowireCapablebeanfactory.createBean(AbstractautowireCapablebeanfactory.java:524) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.Abstractbeanfactory.lambda$doGetBean$0(Abstractbeanfactory.java:335) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:333) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:208) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.Defaultlistablebeanfactory.preInstantiateSingletons(Defaultlistablebeanfactory.java:944) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.context.support.AbstractApplicationContext.finishbeanfactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.7.jar:5.3.7]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.7.jar:5.3.7]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.0.jar:2.5.0]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) [spring-boot-2.5.0.jar:2.5.0]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:438) [spring-boot-2.5.0.jar:2.5.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:337) [spring-boot-2.5.0.jar:2.5.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1336) [spring-boot-2.5.0.jar:2.5.0]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1325) [spring-boot-2.5.0.jar:2.5.0]
    at org.springframework.boot.SpringApplication$run.call(UnkNown sourcE) [spring-boot-2.5.0.jar:2.5.0]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) [groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) [groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:148) [groovy-3.0.8.jar:3.0.8]
    at me.spring.GroovyDemo.GroovyDemoApplication.main(GroovyDemoApplication.groovy:10) [classes/:na]
Caused by: org.springframework.beans.beanInstantiationException: Failed to instantiate [org.elasticsearch.clIEnt.RestHighLevelClIEnt]: Factory method 'clIEnt' threw exception; nested exception is java.lang.TypeNotPresentexception: Type org.springframework.web.reactive.function.clIEnt.WebClIEnt not present
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.7.jar:5.3.7]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.7.jar:5.3.7]
    ... 23 common frames omitted
Caused by: java.lang.TypeNotPresentexception: Type org.springframework.web.reactive.function.clIEnt.WebClIEnt not present
    at sun.reflect.generics.factory.CoreReflectionFactory.makenamedType(CoreReflectionFactory.java:117) ~[na:1.8.0_292]
    at sun.reflect.generics.visitor.ReifIEr.visitClasstypeSignature(ReifIEr.java:125) ~[na:1.8.0_292]
    at sun.reflect.generics.tree.ClasstypeSignature.accept(ClasstypeSignature.java:49) ~[na:1.8.0_292]
    at sun.reflect.generics.visitor.ReifIEr.reifyTypeArguments(ReifIEr.java:68) ~[na:1.8.0_292]
    at sun.reflect.generics.visitor.ReifIEr.visitClasstypeSignature(ReifIEr.java:138) ~[na:1.8.0_292]
    at sun.reflect.generics.tree.ClasstypeSignature.accept(ClasstypeSignature.java:49) ~[na:1.8.0_292]
    at sun.reflect.generics.repository.MethodRepository.getReturnType(MethodRepository.java:68) ~[na:1.8.0_292]
    at java.lang.reflect.Method.getGenericReturnType(Method.java:255) ~[na:1.8.0_292]
    at java.beans.FeatureDescriptor.getReturnType(FeatureDescriptor.java:370) ~[na:1.8.0_292]
    at java.beans.Introspector.getTargetEvenTinfo(Introspector.java:1052) ~[na:1.8.0_292]
    at java.beans.Introspector.getBeanInfo(Introspector.java:427) ~[na:1.8.0_292]
    at java.beans.Introspector.getBeanInfo(Introspector.java:173) ~[na:1.8.0_292]
    at groovy.lang.MetaClassImpl.lambda$addPropertIEs$4(MetaClassImpl.java:3460) ~[groovy-3.0.8.jar:3.0.8]
    at java.security.AccessController.doprivileged(Native Method) ~[na:1.8.0_292]
    at groovy.lang.MetaClassImpl.addPropertIEs(MetaClassImpl.java:3460) ~[groovy-3.0.8.jar:3.0.8]
    at groovy.lang.MetaClassImpl.reinitialize(MetaClassImpl.java:3442) ~[groovy-3.0.8.jar:3.0.8]
    at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3435) ~[groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:273) ~[groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:315) ~[groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.Metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:258) ~[groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:987) ~[groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:71) [groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:156) [groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) [groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) [groovy-3.0.8.jar:3.0.8]
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130) [groovy-3.0.8.jar:3.0.8]
    at me.spring.GroovyDemo.store.ElasticsearchClIEntConfig.clIEnt(ElasticsearchClIEntConfig.groovy:21) ~[classes/:na]
    at me.spring.GroovyDemo.store.ElasticsearchClIEntConfig$$EnhancerBySpringcglib$$a214165c.cglib$clIEnt$0(<generated>) ~[classes/:na]
    at me.spring.GroovyDemo.store.ElasticsearchClIEntConfig$$EnhancerBySpringcglib$$a214165c$$FastClassBySpringcglib$$c29866d5.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.7.jar:5.3.7]
    at org.springframework.context.Annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.7.jar:5.3.7]
    at me.spring.GroovyDemo.store.ElasticsearchClIEntConfig$$EnhancerBySpringcglib$$a214165c.clIEnt(<generated>) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_292]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_292]
    at sun.reflect.DelegaTingMethodAccessorImpl.invoke(DelegaTingMethodAccessorImpl.java:43) ~[na:1.8.0_292]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_292]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.7.jar:5.3.7]
    ... 24 common frames omitted
Caused by: java.lang.classnotFoundException: org.springframework.web.reactive.function.clIEnt.WebClIEnt
    at java.net.urlclassloader.findClass(urlclassloader.java:382) ~[na:1.8.0_292]
    at java.lang.classLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_292]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) ~[na:1.8.0_292]
    at java.lang.classLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_292]
    at java.lang.class.forname0(Native Method) ~[na:1.8.0_292]
    at java.lang.class.forname(Class.java:348) ~[na:1.8.0_292]
    at sun.reflect.generics.factory.CoreReflectionFactory.makenamedType(CoreReflectionFactory.java:114) ~[na:1.8.0_292]
    ... 60 common frames omitted


Process finished with exit code 1

不知何故,我无法创建 ES 客户端 bean。 我的应用程序在包 me.spring.GroovyDemo 中,其他所有内容都在下面。 我尝试添加一些依赖项,例如 webflux 来获取 WebClIEnt,但并没有真正帮助。

启动失败的原因是什么?

解决方法

从堆栈跟踪中可以看出,您应该将 spring-web-reactive 缺少的依赖项添加到您的 Gradle 配置中:

dependencies {
    //...
    implementation 'org.springframework:spring-web-reactive:5.0.0.M4'
}
,

我通过添加来运行您的示例

implementation('org.springframework:spring-webflux')

这个对 WebClient 类的引用从何而来? Spring Data Elasticsearch 使用对 org.springframework:spring-webflux可选依赖项构建,因为它包含用于命令式和反应式设置的代码。 可选因为我们需要它来构建库,但在运行时不需要它 - 在命令模式下。

现在 ClientConfiguration 类及其构建器有一个方法 withWebClientConfigurer(Function<WebClient,WebClient> webClientConfigurer)。这个函数被编译进了库中。

当在 Java 或 Kotlin 的类路径中运行没有 webflux 的命令式、非反应式应用程序时,一切都很好 - 应用程序本身从未被编译为使用此函数,因此不需要它,传递可选依赖项是从未解决。只要不使用这些可选依赖项是否在加载的类中并不重要 - 否则编译器会抱怨。

在 Groovy 中,这似乎有所不同。这里有一些在 ClientConfiguration 类上运行的 Java-bean 检查,它找到了上述方法但找不到 WebClient 类,因为它不在类路径中。

因此,通过将依赖项添加到类路径,这个错误会因在类路径中拥有一个带有响应式代码的库的成本而消失——现在一些 Spring Boot 自动配置可能会试图从那里获取一些东西。

我不知道什么是更好的解决方案,或者如果 groovy 可以更好地处理可选依赖项,我没有使用 groovy。有更多见解的人可能会有更好的答案。

大佬总结

以上是大佬教程为你收集整理的在 Groovy 中使用 ElasticSearch 的 Spring Boot:WebClient 不存在异常全部内容,希望文章能够帮你解决在 Groovy 中使用 ElasticSearch 的 Spring Boot:WebClient 不存在异常所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。