diff --git a/spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java b/spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java index 3b06bd2776a..6f8bcf8ce51 100644 --- a/spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java +++ b/spring-web-reactive/src/main/java/org/springframework/http/server/reactive/ServletHttpHandlerAdapter.java @@ -247,8 +247,11 @@ public class ServletHttpHandlerAdapter extends HttpServlet { private volatile boolean completed = false; + private volatile boolean flushOnNext = false; + private Subscription subscription; + public ResponseBodySubscriber(ServletAsyncContextSynchronizer synchronizer, int bufferSize) { this.synchronizer = synchronizer; @@ -321,6 +324,12 @@ public class ServletHttpHandlerAdapter extends HttpServlet { ServletOutputStream output = synchronizer.getResponse().getOutputStream(); boolean ready = output.isReady(); + + if (flushOnNext) { + flush(output); + ready = output.isReady(); + } + logger.trace("ready: " + ready + " buffer: " + dataBuffer); if (ready) { @@ -370,9 +379,12 @@ public class ServletHttpHandlerAdapter extends HttpServlet { logger.trace("Flushing"); try { output.flush(); + flushOnNext = false; } catch (IOException ignored) { } + } else { + flushOnNext = true; } }