From d8cead5457fad85bfba6de6f7e571603009184ea Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Wed, 1 Apr 2020 11:16:54 +0100 Subject: [PATCH] Use accessor for in-progress async count added in Tomcat 9.0.33 Closes gh-20440 --- .../boot/web/embedded/tomcat/TomcatGracefulShutdown.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatGracefulShutdown.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatGracefulShutdown.java index 6f7341b7ecc..b0f79a93f22 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatGracefulShutdown.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatGracefulShutdown.java @@ -16,22 +16,20 @@ package org.springframework.boot.web.embedded.tomcat; -import java.lang.reflect.Field; import java.time.Duration; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicLong; import org.apache.catalina.Container; import org.apache.catalina.Service; import org.apache.catalina.connector.Connector; +import org.apache.catalina.core.StandardContext; import org.apache.catalina.core.StandardWrapper; import org.apache.catalina.startup.Tomcat; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.web.server.GracefulShutdown; -import org.springframework.util.ReflectionUtils; /** * {@link GracefulShutdown} for {@link Tomcat}. @@ -90,10 +88,7 @@ class TomcatGracefulShutdown implements GracefulShutdown { private boolean active(Container context) { try { - Field field = ReflectionUtils.findField(context.getClass(), "inProgressAsyncCount"); - field.setAccessible(true); - AtomicLong inProgressAsyncCount = (AtomicLong) field.get(context); - if (inProgressAsyncCount.get() > 0) { + if (((StandardContext) context).getInProgressAsyncCount() > 0) { return true; } for (Container wrapper : context.findChildren()) {