Почему приложение spring-webflux по умолчанию запущено на tomcat, а не на netty?

#spring-webflux

#spring-webflux

Вопрос:

Я создал проект Spring-webflux, используя приведенное ниже pom.xml , но когда я запускаю приложение, оно запускается на Tomcat. Разве оно не должно запускаться по умолчанию на Netty?

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
    </parent>
    <groupId>com.test</groupId>
    <artifactId>reactive-rest</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>reactive-rest</name>

    <properties>
        <java-version>1.8</java-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-rsocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-messaging</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-rsocket</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>${java-version}</source>
                        <target>${java-version}</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

  

Основной класс:

 @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, WebMvcAutoConfiguration.class})
public class ReactiveRestApplication {

    public static void main(String[] args) {
        SpringApplication.run(ReactiveRestApplication.class, args);
    }

}
  

Запуск журналов:

 2020-11-09 18:29:26.311  INFO 80838 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2020-11-09 18:29:26.375  INFO 80838 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2020-11-09 18:29:26.390  INFO 80838 --- [  restartedMain] c.o.r.ReactiveRestApplication            : Started ReactiveRestApplication in 18.256 seconds (JVM running for 25.2)

  

Я даже пытался удалить зависимость от tomcat, но приложение все равно запускается на Tomcat

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  

Даже пробовал настраивать spring.main.web-application-type: reactive , но все равно tomcat.

Обновление: я сохранил только spring-boot-starter-webflux и удалил все остальные зависимости. На этот раз также служба запущена на «Tomcat»

Ответ №1:

Если вы посмотрите на различные библиотеки, которые вы включили в mvnrepository, вы увидите, что spring-boot-starter-websocket

Имеет зависимость spring-boot-starter-web , которая, в свою очередь, заставит по умолчанию запускать ваше приложение как приложение SpringMVC, а не приложение webflux.

Я предполагаю, что websockets уже включены в зависимость webflux.

Комментарии:

1. Я прокомментировал все остальные зависимости. Только сохранено spring-boot-starter-webflux , но все же служба запущена на Tomcat.

2. затем вам нужно опубликовать свое дерево зависимостей mvn

3. Я создал новый проект только с webflux в качестве зависимости, и он начался с Netty. Это означает, что вы правы, что-то существует в моих зависимостях. Добавляя их один за другим. Давайте посмотрим, что вызывает проблему

4. Как я уже говорил ранее, если вы опубликуете свое дерево зависимостей, мы, вероятно, сможем это выяснить

5. @TheCoder пожалуйста, предоставьте любую документацию для подтверждения вашего заявления. ReactiveWebsockHandler предоставляется в реактивном пакете docs.spring.io/spring-framework/docs/current/javadoc-api/org / … так что, afaik, ваше утверждение неверно.