From e36678d920f1b4af224e19cdb598f7622bcce91e Mon Sep 17 00:00:00 2001 From: maryarm Date: Sat, 15 Aug 2020 14:20:40 +0200 Subject: [PATCH 1/2] BAEL-4107: Spring MVC Async vs Spring WebFlux --- spring-5-webflux/.gitignore | 3 +- .../spring/asyncvsflux/AsyncVsWebFluxApp.java | 11 ++++++ .../spring/asyncvsflux/WebFluxController.java | 17 ++++++++++ .../spring/asyncvsflux/WebFluxFilter.java | 20 +++++++++++ .../baeldung/asyncvsflux/AsyncController.java | 23 +++++++++++++ .../com/baeldung/asyncvsflux/AsyncFilter.java | 34 +++++++++++++++++++ .../asyncvsflux/AsyncVsWebFluxApp.java | 13 +++++++ 7 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/AsyncVsWebFluxApp.java create mode 100644 spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxController.java create mode 100644 spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxFilter.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncController.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncFilter.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncVsWebFluxApp.java diff --git a/spring-5-webflux/.gitignore b/spring-5-webflux/.gitignore index aa4871eeea..b2a03f1b15 100644 --- a/spring-5-webflux/.gitignore +++ b/spring-5-webflux/.gitignore @@ -1,2 +1,3 @@ # Files # -*.log \ No newline at end of file +*.log +*.ipr \ No newline at end of file diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/AsyncVsWebFluxApp.java b/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/AsyncVsWebFluxApp.java new file mode 100644 index 0000000000..5ae6784536 --- /dev/null +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/AsyncVsWebFluxApp.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.asyncvsflux; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AsyncVsWebFluxApp { + public static void main(String[] args) { + SpringApplication.run(AsyncVsWebFluxApp.class, args); + } +} \ No newline at end of file diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxController.java b/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxController.java new file mode 100644 index 0000000000..8ef1ef3e7e --- /dev/null +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxController.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.asyncvsflux; + +import java.time.Duration; +import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; + +@RestController +public class WebFluxController { + + @GetMapping("/flux_result") + public Mono getResult(ServerHttpRequest request) { + return Mono.defer(() -> Mono.just("Result is ready!")) + .delaySubscription(Duration.ofMillis(500)); + } +} diff --git a/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxFilter.java b/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxFilter.java new file mode 100644 index 0000000000..3a78047ab8 --- /dev/null +++ b/spring-5-webflux/src/main/java/com/baeldung/spring/asyncvsflux/WebFluxFilter.java @@ -0,0 +1,20 @@ +package com.baeldung.spring.asyncvsflux; + +import java.time.Duration; +import org.springframework.stereotype.Component; +import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilterChain; +import reactor.core.publisher.Mono; + +@Component +public class WebFluxFilter implements org.springframework.web.server.WebFilter { + + @Override + public Mono filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) { + return Mono + .delay(Duration.ofMillis(200)) + .then( + webFilterChain.filter(serverWebExchange) + ); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncController.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncController.java new file mode 100644 index 0000000000..ece06f3fc5 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncController.java @@ -0,0 +1,23 @@ +package com.baeldung.asyncvsflux; + +import java.util.concurrent.CompletableFuture; +import javax.servlet.http.HttpServletRequest; +import org.springframework.scheduling.annotation.Async; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class AsyncController { + + @GetMapping("/async_result") + @Async + public CompletableFuture getResultAsyc(HttpServletRequest request) { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return CompletableFuture.completedFuture("Result is ready!"); + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncFilter.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncFilter.java new file mode 100644 index 0000000000..5a8ac4d9df --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncFilter.java @@ -0,0 +1,34 @@ +package com.baeldung.asyncvsflux; + +import java.io.IOException; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import org.springframework.stereotype.Component; + +@Component +public class AsyncFilter implements Filter { + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + filterChain.doFilter(servletRequest, servletResponse); + } + + @Override + public void destroy() { + + } +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncVsWebFluxApp.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncVsWebFluxApp.java new file mode 100644 index 0000000000..3905199468 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/asyncvsflux/AsyncVsWebFluxApp.java @@ -0,0 +1,13 @@ +package com.baeldung.asyncvsflux; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +@SpringBootApplication +@EnableAsync +public class AsyncVsWebFluxApp { + public static void main(String[] args) { + SpringApplication.run(AsyncVsWebFluxApp.class, args); + } +} \ No newline at end of file From 7e07ee688d911d33b8e4914dd016fb273e443d00 Mon Sep 17 00:00:00 2001 From: maryarm <45322329+maryarm@users.noreply.github.com> Date: Fri, 21 Aug 2020 22:33:19 +0200 Subject: [PATCH 2/2] Update .gitignore BAEL-4107 - Undo changes of .gitignore --- spring-5-webflux/.gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-5-webflux/.gitignore b/spring-5-webflux/.gitignore index b2a03f1b15..4dff7c9a4b 100644 --- a/spring-5-webflux/.gitignore +++ b/spring-5-webflux/.gitignore @@ -1,3 +1,2 @@ # Files # *.log -*.ipr \ No newline at end of file