Spring Cloud gateway 运行报错: configure spring.main.web-application-type=reactive o elimine spring-boot

Ayer estaba usando Spring Cloud Gateway y recibí un error: "Establezca spring.main.web-application-type=reactive o elimine la dependencia spring-boot-starter-web". Después de un análisis y una solución, me gustaría compartir la solución con ustedes.

Primero, comprendamos el motivo de este error. El mensaje de error significa que la aplicación actual ha introducido tanto el paquete spring-cloud-starter-gateway como el paquete spring-boot-starter-web, lo que provocará un conflicto. Debido a que Spring Cloud Gateway está construido en base a WebFlux, y spring-boot-starter-web está basado en el contenedor de Servlet, los dos no pueden existir al mismo tiempo.

Entonces, ¿cómo solucionamos este problema? Aquí hay algunos pasos para la solución:

Paso 1: eliminar las dependencias en conflicto

Primero, necesitamos encontrar la dependencia spring-boot-starter-web en el archivo pom.xml de su proyecto y eliminarla. Esto resuelve el problema del conflicto.

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

Paso 2: establezca el tipo de aplicación web en reactivo

A continuación, debemos agregar la siguiente configuración al archivo de configuración de la aplicación application.yml o application.properties:

spring:
  main:
    web-application-type: reactive

De esta manera, le indicamos a la aplicación Spring Boot que utilice el tipo de aplicación web responsiva.

Paso 3: utilice GatewayFilter en su lugar

Si aún desea utilizar el contenedor de servlet tradicional de Spring Boot en lugar de WebFlux, puede considerar usar GatewayFilter en lugar de Spring Cloud Gateway. GatewayFilter es una solución de puerta de enlace liviana que se puede usar con el contenedor Servlet de Spring Boot sin introducir WebFlux.

@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route(p -> p.path("/api")
            .filters(f -> f.filter(new MyFilter()))
            .uri("http://example.com"))
        .build();
}

El código anterior muestra un ejemplo del uso de GatewayFilter, que puede personalizar según sus necesidades.

Mediante los pasos anteriores, resolvimos con éxito el problema del error de Spring Cloud Gateway. Espero que mi intercambio te sea útil.

Supongo que te gusta

Origin blog.csdn.net/javamendou/article/details/131610726
Recomendado
Clasificación