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.
Problem Description
After upgrading from Spring Boot 2.2 to 2.2.3, the
pigx-gatewayapplication 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-nettydependency.
<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
maxLifeTimeparameter (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><dependencyManagement>
<dependencies>
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
<version>0.9.2.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement></code>Java Architecture Diary
Committed to sharing original, high‑quality technical articles; no fluff or promotional content.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.