始めようとしている新しいspringbootアプリケーションがあります。
私が受け取るエラーは
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();
}
}
依存関係を取得するためにmavenを使用していると思います。
私は以下を使用して問題を解決しました:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
の代わりに:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
構成は、事後テストに十分ではありません。
リアクティブWebTestClient
とReactiveWebApplicationContext
には、アプリケーションコンテキストでリアクティブサーバーが必要です。注釈を追加@EnableAutoConfiguration
をRootControllerTest
に追加し、Springに任せてください。
自動構成はクラスパスを検索し、リアクティブクラスとリアクティブコンテキストを見つけた後、ReactiveWebServerFactory
Beanを作成します。
ダウンロードが破損している可能性があります。 〜/ .m2/repositoryを削除してみてください。
私にとって、このエラーは、実際にBootアプリケーションを起動するmain()
メソッドエントリポイントを含むSpringクラスの@SpringBootApplication
アノテーションが欠落していることが原因でした。以下を使用してエラーを解決しました。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}