WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Spring Boot & Hibernate · Expert · question 73 of 100

Can you discuss the process of implementing asynchronous processing in a Spring Boot application using @Async and @EnableAsync annotations?

📕 Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers — PDF + EPUB for $5

Asynchronous processing is the ability for a program to execute tasks concurrently in the background, freeing up the main application thread to handle other tasks. This can be particularly useful for long-running tasks that may otherwise tie up the main thread, making the application unresponsive.

Spring Boot provides support for asynchronous processing through the use of the @Async and @EnableAsync annotations, which allow methods to be executed asynchronously in a separate thread pool.

Here’s an example of how to use these annotations in a Spring Boot application:

First, we need to enable asynchronous processing by adding the @EnableAsync annotation to our configuration class:

    @Configuration
    @EnableAsync
    public class AsyncConfig {
        // configuration code here
    }

Next, we can use the @Async annotation on any method that we want to execute asynchronously. Here’s an example of a service class that uses the @Async annotation to execute a long-running task in a separate thread:

    @Service
    public class MyService {
        
        @Async
        public CompletableFuture<String> longRunningTask() {
            // simulate a long-running task
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return CompletableFuture.completedFuture("Task completed");
        }
    }

In this example, the longRunningTask() method is annotated with @Async, which tells Spring to execute this method asynchronously in a separate thread. The method returns a CompletableFuture, which allows the caller to obtain the result of the task at a later time, once it has completed.

Note that in order to use the @Async annotation, we need to configure a thread pool for Spring to use. By default, Spring will use a SimpleAsyncTaskExecutor, but we can customize this by defining our own TaskExecutor bean:

    @Configuration
    @EnableAsync
    public class AsyncConfig {
        
        @Bean
        public TaskExecutor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(5);
            executor.setMaxPoolSize(10);
            executor.setQueueCapacity(25);
            return executor;
        }
    }

In this example, we define a custom TaskExecutor bean that uses a thread pool with a core size of 5, a maximum size of 10, and a queue capacity of 25.

In summary, using the @Async and @EnableAsync annotations in a Spring Boot application allows us to execute long-running tasks asynchronously in a separate thread pool, improving the responsiveness of our application.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Spring Boot & Hibernate interview — then scores it.
📞 Practice Spring Boot & Hibernate — free 15 min
📕 Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers — PDF + EPUB for $5

All 100 Spring Boot & Hibernate questions · All topics