Backend Development 5 min read

Why Spring Boot 2.2.3 Breaks pigx-gateway and How to Resolve It

Upgrading to Spring Boot 2.2.3 can cause the pigx-gateway service to fail at startup due to an incompatible reactor‑netty ConnectionProvider method, and the article explains the root cause, investigation steps, and how to fix it by adjusting reactor‑netty versions.

Java Architecture Diary
Java Architecture Diary
Java Architecture Diary
Why Spring Boot 2.2.3 Breaks pigx-gateway and How to Resolve It

Problem Description

After upgrading from Spring Boot 2.2 to 2.2.3, the

pigx-gateway

application fails to start.

Failure Log

<code>***************************
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</code>

Investigation

The log points to a version conflict in the

reactor-netty

dependency.

<code>    +---------------------------+            +---------------------------+
    | 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 |
          +----------------+                       +----------------+</code>

ConnectionProvider

Version 0.9.3 does not provide the method

ConnectionProvider.elastic(String, Duration)

. The method signature was changed to include an additional

maxLifeTime

parameter (see reactor/reactor-netty#922, #924).

<code>/**
 * Create a {@link ConnectionProvider} to cache and grow on demand {@link Connection}.
 *
 * 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) {
    ...
}</code>

Solution

Globally use reactor‑netty

0.9.4

(snapshot) or downgrade to

0.9.2

. Spring Boot 2.2.3 does not fix the reactor issue, so downgrading is currently the safest option.

<code>&lt;dependencyManagement&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;io.projectreactor.netty&lt;/groupId&gt;
            &lt;artifactId&gt;reactor-netty&lt;/artifactId&gt;
            &lt;version&gt;0.9.2.RELEASE&lt;/version&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
&lt;/dependencyManagement&gt;</code>
javaSpring BootDependency ConflictConnectionProviderreactor-netty
Java Architecture Diary
Written by

Java Architecture Diary

Committed to sharing original, high‑quality technical articles; no fluff or promotional content.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.