diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorResourceFactory.java b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorResourceFactory.java index 6cafa276ce..17e2604060 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorResourceFactory.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/ReactorResourceFactory.java @@ -143,11 +143,25 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean @Override public void destroy() { - Assert.notNull(this.connectionProvider, "No ConnectionProvider"); - this.connectionProvider.dispose(); + try { + ConnectionProvider provider = this.connectionProvider; + if (provider != null) { + provider.dispose(); + } + } + catch (Throwable ex) { + // ignore + } - Assert.notNull(this.loopResources, "No LoopResources"); - this.loopResources.dispose(); + try { + LoopResources resources = this.loopResources; + if (resources != null) { + resources.dispose(); + } + } + catch (Throwable ex) { + // ignore + } } } diff --git a/src/docs/asciidoc/web/webflux-webclient.adoc b/src/docs/asciidoc/web/webflux-webclient.adoc index ff3557ce94..0505da8657 100644 --- a/src/docs/asciidoc/web/webflux-webclient.adoc +++ b/src/docs/asciidoc/web/webflux-webclient.adoc @@ -95,7 +95,7 @@ concurrency. In this mode global resources remain active until the process exits If the server is timed with the process, there is typically no need for an explicit shutdown. However if the server can start or stop in-process, e.g. Spring MVC application deployed as a WAR, you can declare a Spring-managed bean of type -`ReactorResourceFactory` with `globaResources=true` (the default) to ensure the Reactor +`ReactorResourceFactory` with `globalResources=true` (the default) to ensure the Reactor Netty global resources are shut down when the Spring `ApplicationContext` is closed: [source,java,intent=0]