Spring boot 如何使用Spring';在运行于Tomcat上的SpringWeb应用程序中,使用的是被动WebClient

Spring boot 如何使用Spring';在运行于Tomcat上的SpringWeb应用程序中,使用的是被动WebClient,spring-boot,spring-mvc,spring-webflux,Spring Boot,Spring Mvc,Spring Webflux,无法在运行在Tomcat上的基于Spring引导的Web应用程序中使用Spring的反应式WebClient。由于未解析的依赖关系,应用程序启动本身失败 我查看了,但不幸的是,这不是我的选项,因为我无法将WebApplication类型设置为None 我的gradle文件: 依赖项{ 编译(组:'org.springframework.boot',名称:'springbootstarterdatajpa'){ 排除(模块:“tomcat juli”) } 编译组:“org.springframe

无法在运行在Tomcat上的基于Spring引导的Web应用程序中使用Spring的反应式WebClient。由于未解析的依赖关系,应用程序启动本身失败

我查看了,但不幸的是,这不是我的选项,因为我无法将WebApplication类型设置为None

我的gradle文件:

依赖项{
编译(组:'org.springframework.boot',名称:'springbootstarterdatajpa'){
排除(模块:“tomcat juli”)
}
编译组:“org.springframework.boot”,名称:“springbootstarterdataredis”
编译组:“org.springframework.boot”,名称:“springbootstarterweb”
编译组:“org.springframework.session”,名称:“spring session”
编译组:“org.hibernate”,名称:“hibernate-java8”
编译组:'org.hibernate',名称:'hibernate validator',版本:'5.2.4.Final'
编译组:“com.fasterxml.jackson.datatype”,名称:“jackson datatype guava”
编译组:“com.fasterxml.jackson.datatype”,名称:“jackson-datatype-hibernate5”
编译组:“com.fasterxml.jackson.datatype”,名称:“jackson-datatype-jsr310”
编译组:“com.google.guava”,名称:“guava”
编译组:“org.apache.commons”,名称:“commons-lang3”,版本:“3.3.2”
编译组:“org.postgresql”,名称:“postgresql”
编译组:“io.jsonwebtoken”,名称:“jjwt”,版本:“0.9.0”
编译组:“com.nimbusds”,名称:“nimbus jose jwt”,版本:“5.12”
//Spring管理的依赖项不起作用,因此求助于使用特定版本
//编译('org.springframework.boot:springbootstarterwebflux')
编译组:'org.springframework.boot',名称:'springbootstarterwebflux',版本:'2.1.4.RELEASE'
/*
编译组:“org.springframework”,名称:“springwebreactive”,版本:“5.0.0.M1”
编译组:'org.springframework',名称:'springweb',版本:'5.1.6.RELEASE'
*/
实现'com.auth0:jwks rsa:0.7.0
}
重新包装{
已启用=错误
}
错误:

Caused by: java.lang.NoClassDefFoundError: org/springframework/http/client/reactive/ClientHttpConnector
        at org.springframework.web.reactive.function.client.WebClient.create(WebClient.java:144)
然后我试着加上

compile group: 'org.springframework', name: 'spring-web-reactive', version: '5.0.0.M1'
然后又抱怨了一些别的事情,这让我补充了一句

compile group: 'org.springframework', name: 'spring-web', version: '5.1.6.RELEASE'
但是,在启动我的应用程序时出现了另一个错误,这让我觉得还有其他问题

确切地说,我只想从另一个微服务(基于Spring Boot的Web应用程序)中使用反应式WebClient调用一个微服务

使用RestTemplate可以很好地工作,但我只是想尝试一下反应式WebClient,遇到了错误


由于托管依赖项的方式,托管依赖项不起作用。我们的依赖服务器无法解决这些问题。这就是为什么要有特定版本的spring boot dependencies的原因。org.springframework.http.client.reactive.ClientHttpConnector是spring web的一部分,所以如果使用
spring boot starter webflux
spring boot starter web
,它应该是可用的。如果您正在编写一个传统的基于servlet的应用程序,那么您应该使用
springbootstarterweb

检查
gradledependencies
的输出,确保您有一个
springweb
jar。如果你这样做了,很可能它已经被破坏了,你应该清除你的gradle缓存


我还建议您使用SpringBoot,而不是在每个依赖项上指定版本号。这将确保您得到的版本能够很好地协同工作。

是的,我的是传统的基于Servlet的应用程序(RESTfulWeb服务)。W.r.根据您关于使用
spring boot starter web
的建议,它没有我试图用来调用另一个微服务(graphql端点)的反应式
WebClient
从我的应用程序BTW
spring boot starter webflux
没有下载中提到的反应类,请使用更全面的构建文件更新您的问题。很难帮助你,因为你的问题暗示了几次不相容的尝试。您所指的spring指南正在运行,已由CI环境进行测试。@BrianClozel更新了我的问题,并将我的依赖项上载到此处:。依赖项确实列出了SpringWeb,但我想知道为什么我仍然得到
java.lang.NoClassDefFoundError:org/springframework/http/client/reactive/ClientHttpConnector
你解决了吗?