web-dev-qa-db-fra.com

Impossible de démarrer ReactiveWebApplicationContext en raison du bean ReactiveWebServerFactory manquant

J'ai une nouvelle application Springboot que j'essaie de démarrer.

L'erreur que je reçois est

org.springframework.context.ApplicationContextException: Unable to start reactive web server; nested exception is org.springframework.context.ApplicationContextException: Unable to start ReactiveWebApplicationContext due to missing ReactiveWebServerFactory bean.
    at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.onRefresh(ReactiveWebServerApplicationContext.Java:76) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]

src/main/Java/bubbleshadow/RootController.Java

package bubbleshadow;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@RestController
public class RootController {
  public RootController() {

  }

  @GetMapping("/")
  public Mono<HttpStatus> returnOk() {
    return Mono.just(HttpStatus.OK);
  }
}

src/test/Java/test/bubbleshadow/RootControllerTest.Java

package test.bubbleshadow;
import bubbleshadow.RootController;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes=RootController.class, webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
public class RootControllerTest {
  @Autowired
  WebTestClient webTestClient;

  @Test
  public void baseRouteShouldReturnStatusOK() {
    webTestClient.head().uri("/").exchange().expectStatus().isOk();
  }
}
13
Daniel Lynch

Je suppose que vous utilisez maven pour obtenir vos dépendances.

J'ai résolu le problème en utilisant:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
        <version>2.0.3.RELEASE</version>
    </dependency>

Au lieu de:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webflux</artifactId>
        <version>5.0.7.RELEASE</version>
    </dependency>
9
François Dupire

Votre configuration n'est pas suffisante pour des tests réactifs.

Le réactif WebTestClient ainsi que ReactiveWebApplicationContext ont besoin d'un serveur réactif dans le contexte de l'application. Ajouter une annotation @EnableAutoConfiguration à votre RootControllerTest et laissez Spring's s'en charger à votre place.

L'autoconfiguration recherche votre chemin de classe et après avoir trouvé les classes réactives et le contexte réactif, créez le bean ReactiveWebServerFactory.

6
vdou

Probablement un téléchargement corrompu. Essayez de supprimer ~/.m2/repository.

5
Aniket Kulkarni

Pour moi, l'erreur était causée par une annotation @SpringBootApplication Manquante sur la classe Spring contenant le point d'entrée de la méthode main() qui démarre réellement l'application de démarrage. L'utilisation de ce qui suit a résolu l'erreur:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
2
Tim Biegeleisen