appels réactifs en fonction @PostConstruct

Dmitry:

Pourrait aider quelqu'un me faire ce qui suit:

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

appel webclient prendra fin après func (). Très probablement, il se produira avant la première demande arrive, mais aucune garantie. L'autre option consiste à bloquer (), ce qui est contraire au but d'être réactif.

Quelle serait la bonne façon de faire des appels réactifs dans les méthodes @PostConstruct?

Je vous remercie.

vins :

J'ai créé un haricot simple.

mise à jour synchrone:

@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
        );
    }

}
  • Il a fallu un certain temps pour l'application pour commencer (plus de 5 secondes), car nous avons simulé un certain processus de longue haleine dans la construction de poste. méthode d'impression planifiée a commencé à imprimer seulement après l'application a commencé. Il a commencé à imprimer un message « Construction fait ».

mise à jour asynchrone:

@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
        );
    }

}
  • Or , dans cette approche, l'application a commencé dans les 2 secondes. Méthode d' impression à partir de l' impression nullpendant quelques secondes. Ensuite , il a commencé à imprimer « Construction fait ». Il ne termine pas la mise à jour de la valeur Flux PostConstruct. Il est arrivé de manière asynchrone.

Approche réactive est bonne quand vous voulez un comportement non-bloquant et obtenir quelque chose fait de manière asynchrone. Si vous pensez que votre création d'un composant doit attendre la construction proprement dite, vous devez bloc! Sinon, vous pouvez aller avec la deuxième approche.

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=410471&siteId=1
conseillé
Classement