

Table of Contents
1. Overview
In this article, we will see spring web flux framework examples and will cover a little about spring web flux framework use.
2. Spring web flux framework
In the traditional programming model, all services are synchronous
and blocking
in nature. Reactive programming came into the picture to provide an asynchronous and non-blocking programming model.
Reactive streams
are used to achieve asynchronous and non-blocking backpressure. Reactive streams are the standard and specification for Stream-oriented libraries for the JVM. Rxjava, project reactor and more are implementations of the reactive streams API specification.
Spring web flux is a mirror version of spring MVC and it supports fully non-blocking reactive streams
. Spring web flux internally uses a project reactor which is one of the implementations of the reactive library.
Spring web flux framework
is available from spring 5 and provides reactive programming support for web applications.
Next, we are going to implement non-blocking services by using spring web flux, spring boot, and mango database.
3.Spring web flux example
3.1 Get started
we should add spring-boot-starter-webflux dependency to enable reactive programming in the application and add spring-boot-starter-data-mongodb-reactive dependency to get non-blocking and event-driven features from mongo database side.
To get reactive programming features, everything should be non-blocking in the request like from request making to getting data from the database.
At the time of writing this article, Spring did not provide fully featured connectivity API for reactive relational database integration. If you want more information why it is implemented yet while relational databases are most popular. Go through the following link
reactive-programming-and-relational-databases
In pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId> </dependency>
3.2 Project Structure
3.3 Mono and Flux
Spring web flux internally uses the project reactor library. Mono and Flux are Publisher interface implementations.
Mono
represents 0…1 elements
Flux
represents 0…N elements
Spring web flux framework provides two types of programming models
1.Annotated controllers
2.Functional Endpoints
In this article, we implemented REST API
with annotated controllers and have look at the following controller class
@RestController public class MarginController { @Autowired private MarginRepository marginRepository; // create margin @PostMapping("/createMargin") public Mono<MarginDo> createMargin(@RequestBody MarginDo marginDo) { return marginRepository.save(marginDo); } // update margin @PostMapping("/updateMargin") public void updateMargin(@RequestBody MarginDo marginDo) { marginRepository.save(marginDo); } // get margin by customer id @GetMapping("/getMargin/{customerId}") public Mono<MarginDo> getCustomerMargin(@PathVariable(value = "customerId") String customerId) { return marginRepository.findById(customerId); } // get all margins @GetMapping("/getAllMargins") public Flux<MarginDo> getAllMargins() { return marginRepository.findAll(); } // delete margin by customer id @DeleteMapping("/deleteMargin/{customerId}") public void deleteMargin(@PathVariable(value = "customerId") String customerId) { marginRepository.deleteById(customerId); } // stream live margins @GetMapping(value = "/stream/margins", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<MarginDo> streamAllMargins() { return marginRepository.findAll(); } }
Application.properties file
spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=test debug=true
Note: while testing method streamAllMargins(), use browser then we can see event-stream output printing in the browser one by one like as in the following image
3.4 Mango reactive repository
Use the ReactiveMongoRepository interface to get all basic Dao layer methods that are non-blocking in nature.
public interface MarginRepository extends ReactiveMongoRepository<MarginDo, String> { }
4. Conclusion
We have explained the spring web flux framework importance with example clearly.
Hope 😊 you like it. if you want more information you can through reference links provided in section 6.
5. Spring Web Flux Framework Source Code
Complete example code is available in the following git repository.
Git Repository link: https://github.com/subhashlamba/spring-examples
6.References
1.spring-framework-reference-web-reactive
2.spring-framework-reference-html-web-reactive