From 2fe4063bfcd7621e463bc3fcb6b150c828902a39 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Tue, 20 Apr 2021 00:14:45 -0400 Subject: [PATCH] Only fail if mvc is on the classpath and gateway is enabled. This is useful for libraries that might write functionality for zuul and gateway. See gh-2176 --- .../sample/MvcFailureAnalyzerApplicationTests.java | 12 +++++++++++- .../GatewayClassPathWarningAutoConfiguration.java | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/src/test/java/org/springframework/cloud/gateway/sample/MvcFailureAnalyzerApplicationTests.java b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/src/test/java/org/springframework/cloud/gateway/sample/MvcFailureAnalyzerApplicationTests.java index 0cf93f6e..a73fb679 100644 --- a/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/src/test/java/org/springframework/cloud/gateway/sample/MvcFailureAnalyzerApplicationTests.java +++ b/spring-cloud-gateway-integration-tests/mvc-failure-analyzer/src/test/java/org/springframework/cloud/gateway/sample/MvcFailureAnalyzerApplicationTests.java @@ -25,6 +25,7 @@ import org.springframework.boot.test.system.OutputCaptureExtension; import org.springframework.cloud.gateway.support.MvcFoundOnClasspathException; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** @@ -34,7 +35,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; public class MvcFailureAnalyzerApplicationTests { @Test - public void contextLoads(CapturedOutput output) { + public void exceptionThrown(CapturedOutput output) { assertThatThrownBy( () -> new SpringApplication(MvcFailureAnalyzerApplication.class) .run("--server.port=0")).hasRootCauseInstanceOf( @@ -43,4 +44,13 @@ public class MvcFailureAnalyzerApplicationTests { "Please remove spring-boot-starter-web dependency"); } + @Test + public void exceptionNotThrownWhenDisabled(CapturedOutput output) { + assertThatCode(() -> new SpringApplication(MvcFailureAnalyzerApplication.class) + .run("--spring.cloud.gateway.enabled=false", "--server.port=0")) + .doesNotThrowAnyException(); + assertThat(output).doesNotContain("Spring MVC found on classpath", + "Please remove spring-boot-starter-web dependency"); + } + } diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java index b70381d0..36b61182 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/config/GatewayClassPathWarningAutoConfiguration.java @@ -22,11 +22,13 @@ import org.apache.commons.logging.LogFactory; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.gateway.support.MvcFoundOnClasspathException; import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) @AutoConfigureBefore(GatewayAutoConfiguration.class) +@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMissing = true) public class GatewayClassPathWarningAutoConfiguration { private static final Log log = LogFactory