martes, 14 de noviembre de 2017

Reactive Spring con IntelliJ, Maven

Reactive Spring

Este laboratorio se basa en https://www.youtube.com/watch?v=zVNIZXf4BG8
Reactive Spring by Josh Long

Comenzamos creando el proyecto Maven con en la página http://start.spring.io/

  Ooops!! No seleccionamos la dependencia en la pagina de start.spring.io tecleando Reactive Web en el campo Search for dependencies, asi que o lo hacemos de nuevo, o lo ajustamos, en este caso lo ajustaremos a patita. buscando la dependencia de Reactor en Maven Repository, y agregandola en el pom.xml. como se ve unos pasos adelante.

abrimos y descomprimimos el archivo que descargo, Nos ubicamos en el archivo pom.xml y lo abrimos con IntelliJ, una vez abierto con intelliJ seleccionado el archivo pom.xml damos Ctrl+Shift+N y damos DemoApplication y del autoacompletamiento lo seleccionamos.

nos genera
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplicationpublic class DemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

Como usaremos Reactor debemos integrar la dependencia en el archivo pom, para ello vamos a buscar primero en el repositorio de maven


copiamos el codigo de dependencia a pom.xml
<!-- https://mvnrepository.com/artifact/io.projectreactor/reactor-core -->
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>3.1.0.RC2</version>
</dependency>


El IntelliJ nos dara un popup al que le daremos enable auto import, para asi tener la libreria en el auto sensitive context cuando tecleemos codigo.

En Reactor tenemos dos tipos de Publisher Mono y Flux, Mono solo produce un solo valor y Flux puede producir ilimitado numero de valores.
   Mono<String> x;
  
@Bean 
CommandLineRunner demo() {
   return args -> {
      //Mono<String> x;      Flux<String> x = Flux.fromArray( "1,2,3,4".split(","));
      x.map(Integer::parseInt)           //convertimos cada valor a Integer  
            .filter(i -> i % 2 == 0 )    //filtamos los pares
            .subscribe(...)
   };
}

Podemos mandarlo a un Stream
pero vamos a subscribe() cuyos versiones de parametros son


una variante interesante del metodo subscribe es el de tres Consumers, uno para los datos en Sí, otro para cuando hay Exception (Throwable), y otro Runnable para el final del proceso.






y Tenemos la corrida.


No hay comentarios:

Publicar un comentario