美文网首页微服务
翻车!Spring Boot 2.2.3 不兼容 Spring

翻车!Spring Boot 2.2.3 不兼容 Spring

作者: 冷冷zz | 来源:发表于2020-01-20 20:35 被阅读0次

    问题说明

    Spring Boot 2.2.3 修复了 Spring Boot 2.2的大量问题,当升级至 2.2.3 以后,直接翻车 pigx-gateway 网关应用直接启动不起来。

    翻车日志

    ***************************
    APPLICATION FAILED TO START
    ***************************
    
    Description:
    
    An attempt was made to call a method that does not exist. The attempt was made from the following location:
    
        org.springframework.cloud.gateway.config.GatewayAutoConfiguration$NettyConfiguration.gatewayHttpClient(GatewayAutoConfiguration.java:597)
    
    The following method did not exist:
    
        reactor.netty.resources.ConnectionProvider.elastic(Ljava/lang/String;Ljava/time/Duration;)Lreactor/netty/resources/ConnectionProvider;
    
    The method's class, reactor.netty.resources.ConnectionProvider, is available from the following locations:
    
        jar:file:/Users/lengleng/env/repository/io/projectreactor/netty/reactor-netty/0.9.3.RELEASE/reactor-netty-0.9.3.RELEASE.jar!/reactor/netty/resources/ConnectionProvider.class
    
    It was loaded from the following location:
    
        file:/Users/lengleng/env/repository/io/projectreactor/netty/reactor-netty/0.9.3.RELEASE/reactor-netty-0.9.3.RELEASE.jar
    
    
    Action:
    
    Correct the classpath of your application so that it contains a single, compatible version of reactor.netty.resources.ConnectionProvider
    
    

    问题排查

    如上日志涉及到 reactor-netty 依赖版本的问题

        +---------------------------+            +---------------------------+
        | Spring Boot 2.2.3.RELEASE |            | Spring Boot 2.2.2.RELEASE |
        +-------------+-------------+            +-------------+-------------+
                      |                                        |
    +-----------------v----------------+     +-----------------v----------------+
    |spring-boot-starter-reactor-netty |     |spring-boot-starter-reactor-netty |
    |              2.2.3.RELEASE       |     |              2.2.2.RELEASE       |
    +-----------------+----------------+     +-----------------+----------------+
                      |                                        |
              +-------+--------+                       +-------+--------+
              |  reactor-netty |                       |  reactor-netty |
              |  0.9.3.RELEASE |                       |  0.9.2.RELEASE |
              +----------------+                       +----------------+
    

    ConnectionProvider

    0.9.3 未对以下版本兼容,去掉ConnectionProvider.elastic(Ljava/lang/String;Ljava/time/Duration;) ,多态出来 一个 maxLifeTime 的参数, 具体参考
    reactor/reactor-netty#922
    reactor/reactor-netty#924

        /**
         * Create a {@link ConnectionProvider} to cache and grow on demand {@link Connection}.
         * <p>An elastic {@link ConnectionProvider} will never wait before opening a new
         * connection. The reuse window is limited but it cannot starve an undetermined volume
         * of clients using it.
         *
         * @param name the channel pool map name
         * @param maxIdleTime the {@link Duration} after which the channel will be closed when idle (resolution: ms),
         *                    if {@code NULL} there is no max idle time
         * @param maxLifeTime the {@link Duration} after which the channel will be closed (resolution: ms),
         *                    if {@code NULL} there is no max life time
         *
         * @return a new {@link ConnectionProvider} to cache and grow on demand
         * {@link Connection}
         */
        static ConnectionProvider elastic(String name, @Nullable Duration maxIdleTime, @Nullable Duration maxLifeTime) {
          ...
        }
    

    解决方法

    • 全局使用 0.9.4 暂时是 快照版本,或者降级到 0.9.2 ,Spring Boot 2.2.3 未修改reactor 问题,降级是目前最好的选择。
    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>io.projectreactor.netty</groupId>
                    <artifactId>reactor-netty</artifactId>
                    <version>0.9.2.RELEASE</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    

    image

    相关文章

      网友评论

        本文标题:翻车!Spring Boot 2.2.3 不兼容 Spring

        本文链接:https://www.haomeiwen.com/subject/hecszctx.html