java—将spring boot从2.3.5.release升级到2.4.0后,在包reactor.netty.tcp中找不到proxyprovider

mbjcgjjk  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(780)

在pom.xml中从spring boot版本2.3.5.release升级到2.4.0后,无法再导入类proxyprovider( import reactor.netty.tcp.ProxyProvider; ). 请注意,它甚至不适用于更高版本的spring boot(尝试了2.5.0和2.5.2)。通过检查maven依赖关系,我注意到:
在版本2.3.5.0中,该类取自 io.projectreactor.netty:reactor-netty:0.9.12.RELEASE 在版本2.4.0中,该类取自 io.projectreactor.netty:reactor-netty-http:1.0.1 我可以通过检查导入类的来源来找到intellij上的这些信息 reactor.netty.http.client.HttpClient ,它在两个版本上都可以工作,尽管来自上述两个不同的库。
从SpringBoot2.4.0开始,您知道如何解决编译问题吗?
请注意,我在spring boot的问题跟踪程序中发现了相同的问题,但不幸的是,它被关闭,没有给出任何解释:https://github.com/spring-projects/spring-boot/issues/24414 .
作为进一步的信息,这些都是2.3.5.1版本中的净依赖项:

当Spring Boot版本为2.4.0时:

还要注意,在pom.xml中,我导入了依赖项 azure-keyvault-secrets-spring-boot-starter 在这两种情况下,都是版本2.3.5(但即使是该库的最新版本也会出现相同的问题,该库已移至https://mvnrepository.com/artifact/com.azure.spring/azure-spring-boot-starter-keyvault-secrets/3.6.0) :

<!-- Azure KeyVault access (password safe) -->
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-keyvault-secrets-spring-boot-starter</artifactId>
    <version>${azure.version}</version>
    <scope>runtime</scope>
</dependency>

这是使用proxyprovider类的代码:

HttpClient httpClient = HttpClient.create()
    .tcpConfiguration(tcpClient -> (sslContext != null
            ? tcpClient.secure(sslProviderBuilder -> sslProviderBuilder.sslContext(sslContext))
            : tcpClient)
            .proxy(proxy -> proxy
                    .type(ProxyProvider.Proxy.HTTP)
                    .host(host)
                    .port(port))
    );
wtzytmuj

wtzytmuj1#

我注意到,在我的代码中,方法 tcpConfiguration 在spring引导版本2.4.0上已弃用。然后我尝试寻找替代方案,在github的这篇文章中,我发现了一个关于如何改进代码的提示:https://github.com/reactor/reactor-netty/issues/1397#issuecomment-751976453. 简言之,它说
您可以通过httpclient.tcpconfiguration()配置的所有内容,现在您可以直接使用httpclient公开的方法进行配置
对于任何感兴趣的人,我在这里发布我的更新代码,它与问题中的代码具有相同的逻辑,但没有错误,在spring boot 2.4.0中:

HttpClient httpClient = HttpClient.create();
            if (sslContext != null) {
                httpClient = httpClient.secure(sslContextSpec -> sslContextSpec.sslContext(sslContext));
            }
            httpClient = httpClient.proxy(typeSpec -> typeSpec.type(ProxyProvider.Proxy.HTTP).host(host).port(port));

在这种情况下,仍然使用proxyprovider类,但它来自不同的包: reactor.netty.transport.ProxyProvider (而不是 reactor.netty.tcp.ProxyProvider ).

相关问题