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

Spring Framework · Expert · question 78 of 100

How can you use Project Reactor and Spring WebFlux for creating non-blocking, reactive applications in Spring?

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

Project Reactor is a reactive programming library designed specifically for the Java virtual machine, and it provides a set of building blocks for creating reactive applications. Spring WebFlux is a web framework that is built on top of Project Reactor and is designed specifically for creating reactive web applications in the Spring ecosystem.

Using Project Reactor and Spring WebFlux, we can create non-blocking, reactive applications in Spring. Here are the steps we can follow to create such applications:

1. Add the necessary dependencies To use Project Reactor and Spring WebFlux in our Spring application, we need to add the following dependencies to our project:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
</dependency>

2. Create a reactive MongoDB repository To create a reactive MongoDB repository in Spring, we need to extend the ReactiveMongoRepository interface provided by Spring Data MongoDB. Here is an example:

import org.springframework.data.mongodb.repository.ReactiveMongoRepository;

public interface PersonRepository extends ReactiveMongoRepository<Person, String> {

}

3. Create a reactive controller To create a reactive controller in Spring WebFlux, we need to annotate our controller methods with the @GetMapping, @PostMapping, @PutMapping, or @DeleteMapping annotations. Here is an example:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@RestController
public class PersonController {

    private final PersonRepository personRepository;

    public PersonController(PersonRepository personRepository) {
        this.personRepository = personRepository;
    }

    @GetMapping("/persons")
    public Flux<Person> getAllPersons() {
        return personRepository.findAll();
    }

}

4. Use reactive streams To use reactive streams in our application, we can use the following Project Reactor types: Flux, Mono, and FluxSink. Here is an example:

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public class PersonService {

    private final PersonRepository personRepository;

    public PersonService(PersonRepository personRepository) {
        this.personRepository = personRepository;
    }

    public Flux<Person> getAllPersons() {
        return personRepository.findAll();
    }

    public Mono<Person> getPersonById(String id) {
        return personRepository.findById(id);
    }

    public Flux<Person> getPersonsByName(String name) {
        return personRepository.findByName(name);
    }

    public Mono<Person> savePerson(Person person) {
        return personRepository.save(person);
    }

}

In summary, we can use Project Reactor and Spring WebFlux to create non-blocking, reactive applications in Spring by adding the necessary dependencies, creating a reactive MongoDB repository, creating a reactive controller, and using reactive streams.

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

All 100 Spring Framework questions · All topics