Wenn Sie sowohl spring-boot-starter-web
als auch spring-boot-starter-webflux
zu Ihrer Anwendung hinzufügen, wird Spring Boot diese als Spring MVC-App konfigurieren.
Dies ist beabsichtigt, da viele Spring MVC die Webflux-Abhängigkeit erhalten wird, um die neuen WebClient
in ihren MVC-Apps zu nutzen. Ab Spring Framework 5 kann Spring MVC auch einige Fälle mit Flux auf Controller-Ebene behandeln.
Sie können jederzeit Ihre Wahl wie diese zwingen:
SpringApplication app = new SpringApplication(MyApplication.class);
app.setWebApplicationType(WebApplicationType.REACTIVE);
app.run(...);
In Ihrem Fall, es geht nicht um eine Wahl zu zwingen, sondern etwas verwenden, die nicht in WebFlux unterstützt wird.
Die Konfigurationseigenschaft server.servlet.context-path
ist Servlet-spezifisch und funktioniert daher nicht mit WebFlux. Momentan unterstützt Spring Boot keine War-Bereitstellung oder mehrere Webkontexte für WebFlux-Anwendungen. Es macht also keinen Sinn, eine solche Immobilie anzubieten.
Der Laufzeitmodell Unterschied zwischen "Servlet-basierte" und Reaktive Laufzeit mit Spring kann ziemlich subtil sein, und ich ermutige Sie, eine talk that describes those choices zu sehen. Die kurze Antwort lautet: Wenn Sie Spring MVC mit asynchronen Typen verwenden (DeferredResult
, Flux
oder SseEmitter
), werden die Dinge asynchron sein, aber das Lesen und Schreiben wird weiterhin blockiert.
Richtig Benchmarking, das ist ziemlich hart, aber die Ergebnisse, die Sie sehen, werden irgendwie erwartet. Lokales Ausführen von Server + Client, keine Latenz, bei roher Durchsatz - all diese Einschränkungen sollten nicht zugunsten des reaktiven Modells sein, das Nebenkosten hat. Wenn überhaupt, zeigt dieser Benchmark, dass der reaktive Stapel bereits optimiert ist, sogar für nicht ideale Anwendungsfälle!
danke Brian du hast mir sehr geholfen! –