Writing an Asynchronous Controller

Writing a controller and having it handle the request asynchronously is as simple as changing the return type of the controllers handler method . Let’s imagine that the call to HelloWorldController.hello takes quite some time but we don’t want to block the server for that.

The hello method now returns a Callable<String> instead of returning a String directly. Inside the newly constructed Callable<String> there is a random wait to simulate a delay before the message is returned to the client

Change the signature of the method to return CompletableFuture<String> and use the TaskExecutor to asynchronously execute the code.


Calling the supplyAsync (or when using void, use runAsync) a task is submitted.It returns a CompletableFuture. Here you use the supplyAsync method that takes both a Supplier and an Executor. This way you can reuse the TaskExecutor for async processing. If you use the supplyAsync method, which only takes a Supplier, it will be executed using the default fork/join pool available on the JVM.

When returning a CompletableFuture, you can take advantage of all the features of it like composing and chaining multiple CompletableFuture instances.


To view or add a comment, sign in

More articles by 🧿 🟨Saral Saxena 🧑‍💻🏆

  • Run .http Files in a Intellij idea

    When developing APIs in a Spring Boot project, testing endpoints is a crucial part of the workflow. Tools like Postman…

  • Mastering API Versioning in Spring Boot: Stop Breaking Your Endpoints

    Introduction API versioning is one of the most overlooked yet critical aspects of API development. Many developers…

  • Blazing Fast Performance in Spring Boot 3 with CDS

    Spring Boot 3 brings several performance optimizations, but one of the most exciting ones is Class Data Sharing (CDS)…

  • Java 21 Docker Optimization

    Java 21 introduces significant improvements and features, particularly in containerization. This article explores five…

  • Java Optimization: 7000ms → 90ms

    When working with two separate lists and trying to match data based on a common id, many developers often default to…

  • Spring Boot Red Flags

    Spring Boot is a powerful framework designed to simplify Java application development by offering production-ready…

  • Stop Writing != null

    Null pointer exceptions are a familiar pain point in Java development. The go-to solution for many developers? Add a…

  • Spring boot Apps getting optimized

    Before making any changes, established clear performance baselines. Here’s what our initial metrics looked like:…

  • Validating Payloads with Spring Boot 3.4.0

    First, let’s examine a controller that receives a object. This object contains fields such as: first name, last name…

  • Limitations of Java Executor Framework.

    The Java Executor Framework has inherent limitations that affect its performance in high-throughput, low-latency…

Insights from the community

Explore topics