Siguiendo con la programación reactiva de última generación en este artículo vamos a analizar una aplicación web reactiva mediante el módulo Webflux de Spring 5 y Spring-boot 2. 

Nuestra aplicación va a consistir en un CRUD Mongo Reactive para expresiones de utilidad en inglés y español donde pondremos el foco en los elementos clave de webflux (utilizados en el controlador y  el modelo). En cuanto a la presentación: html5 con plantillas thymeleaf y bootstrap, una opción clásica por lo tanto.

El código fuente lo teneis disponible en github .

De entre las dependencias necesarias a añadir en el pom destacar el starter de spring-boot propio de Reactive webflux: spring-boot-starter-webflux

Para la implementación del DAO la mejor opción es crear una interfaz que herede de ReactiveMongoRepository<Expression, String> ,siendo Expression el bean de la colección Mongo para nuestro sencillo negocio.

De ésta forma tenemos disponibles todos los servicios de nuestro modelo de negocio para persistir en MongoDB de manera reactiva sin la necesidad de implementar nada extra de lo que nos aporta Project Reactor.

El bean Expression contiene los atributos english(clave de la coleeción) y spanish para manejar los valores de las correspondientes expresiones en ambos idiomas.

Desde el punto de vista del controlador tendremos los métodos propios de la filosofía de un CRUD spring-boot pero utilizando los elementos Flux y Mono propios del paradigma reactivo (ver articulo previo…

Entrando en detalle en el flujo, el punto de acceso a la aplicación es el listado de todas las expresiones en inglés y español existentes eso se gestiona mediante el método

@GetMapping({«/list»,»/»}) public String listar(Model model)

que utiliza Flux<Expression> ctrlExpressionFlux=dao.findAll(new Sort(Sort.Direction.ASC,»english»));

Obteniendo la lista de expresiones de manera ascendente, una vez realizada la suscripción..

ctrlExpressionFlux.subscribe(……..

Por último cargamos el modelo y establecemos la ruta.

model.addAttribute(«expressions», ctrlExpressionFlux);
model.addAttribute(«tittle»,»English expressions dictionary»);
return «list»;

Al renderizarse la página se muestran las expresiones existentes.

A continuación se muestran todos los métodos de controlador para las correspondientes acciones.

Editar una expresión de las existentes.

Crear una expresión nueva

Eliminar una expresión

Vemos como en todos los casos la estructura es la misma

  • Creación del Flux o Mono 
  • Suscripción
  • Mapeo de modelo para la renderización
  • Enrutamiento

Por último comentar que en el run(..) del SpringWebFluxAtbNinjaApplication teneis la posibilidad de tener unos datos inciales descomentando el fragmento de código indicado al igual que el reseteo de la colección si así se quiere, mediante mongoTemplate.dropCollection(«expressions»).subscribe();

Pues ya teneis un ejemplo de CRUD spring-boot Reactivo con webflux, espero os sea de utilidad.

Un saludo y hasta el próximo artículo

 

 

 

 

 

 

 

 

 

 

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de sus datos para estos propósitos. Más información
Privacidad