llamadas reactivos en función @PostConstruct

Dmitry:

¿Podría alguien me ayuda a hacer lo siguiente:

@PostContruct public void func() {
   webclient.get()...subscribe();
}

webclient llamada terminará después del retorno de func (). Lo más probable es que va a pasar antes de que la primera petición llega, pero no hay garantías. La otra opción es bloquear (), que contradice el objetivo de ser reactiva.

¿Cuál sería la forma correcta de realizar llamadas reactivos en métodos @PostConstruct?

Gracias.

vinos:

He creado un grano simple.

actualización sincrónica:

@Component
public class BeanTest {

    private String postConstructValue;

    @PostConstruct
    public void init(){
        try {
            Thread.sleep(5000);
            this.postConstructValue = "Construction done";
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Scheduled(fixedRate = 500)
    public void print(){
        System.out.println(
                this.postConstructValue
        );
    }

}
  • Tomó un poco de tiempo para la aplicación se ejecute (más de 5 segundos), ya que hemos simulado proceso que lleva en el puesto constructo algún tiempo. método de impresión programada comenzó a imprimir sólo después de la aplicación comenzó. Se inició la impresión "de hecho la construcción" mensaje.

actualización asíncrona:

@Component
public class BeanTest {

    private String postConstructValue;

    @PostConstruct
    public void init(){
        Flux.just("Construction done")
                .delayElements(Duration.ofSeconds(5))
                .subscribe(s -> this.postConstructValue = s);
    }

    @Scheduled(fixedRate = 500)
    public void print(){
        System.out.println(
                this.postConstructValue
        );
    }

}
  • Ahora bien, en este enfoque, la aplicación inicia dentro de 2 segundos. Método de impresión de iniciar la impresión nulldurante unos segundos. Luego se comenzó a imprimir "Construcción hacer". No termina la actualización del valor de flujo PostConstruct. Ocurrió de forma asíncrona.

enfoque reactivo es bueno cuando se desea un hecho de forma asíncrona sin bloqueo comportamiento y conseguir algo. Si usted piensa que su creación componente debe esperar a que la construcción adecuada, usted tiene que bloque! De lo contrario, se puede ir con el segundo enfoque.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=410473&siteId=1
Recomendado
Clasificación