From b658013a97346567596897e3298e66551256f176 Mon Sep 17 00:00:00 2001 From: davidh44 <70000000+davidh44@users.noreply.github.com> Date: Thu, 28 Oct 2021 07:50:25 -0700 Subject: [PATCH 1/2] Create EndpointWebExtension only if necessary This commit updates Actuator's EndpointWebExtensions to be created only if the related endpoint is exposed over HTTP. See gh-28475 --- .../cache/CachesEndpointAutoConfiguration.java | 2 ++ ...urationPropertiesReportEndpointAutoConfiguration.java | 2 ++ .../env/EnvironmentEndpointAutoConfiguration.java | 2 ++ .../quartz/QuartzEndpointAutoConfiguration.java | 2 ++ .../cache/CachesEndpointAutoConfigurationTests.java | 9 +++++++++ ...onPropertiesReportEndpointAutoConfigurationTests.java | 9 +++++++++ .../env/EnvironmentEndpointAutoConfigurationTests.java | 9 +++++++++ .../quartz/QuartzEndpointAutoConfigurationTests.java | 9 +++++++++ 8 files changed, 44 insertions(+) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java index f17d0bbb1d..16bd9503ff 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java @@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.cache; import java.util.Map; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure; import org.springframework.boot.actuate.cache.CachesEndpoint; import org.springframework.boot.actuate.cache.CachesEndpointWebExtension; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -53,6 +54,7 @@ public class CachesEndpointAutoConfiguration { @Bean @ConditionalOnMissingBean @ConditionalOnBean(CachesEndpoint.class) + @ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB) public CachesEndpointWebExtension cachesEndpointWebExtension(CachesEndpoint cachesEndpoint) { return new CachesEndpointWebExtension(cachesEndpoint); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java index 0c3df64d19..44536ab5ab 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.context.properties; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpointWebExtension; import org.springframework.boot.actuate.endpoint.SanitizingFunction; @@ -62,6 +63,7 @@ public class ConfigurationPropertiesReportEndpointAutoConfiguration { @Bean @ConditionalOnMissingBean @ConditionalOnBean(ConfigurationPropertiesReportEndpoint.class) + @ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB) public ConfigurationPropertiesReportEndpointWebExtension configurationPropertiesReportEndpointWebExtension( ConfigurationPropertiesReportEndpoint configurationPropertiesReportEndpoint) { return new ConfigurationPropertiesReportEndpointWebExtension(configurationPropertiesReportEndpoint); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java index d910dd10de..1dd998dd32 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java @@ -18,6 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.env; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure; import org.springframework.boot.actuate.endpoint.SanitizingFunction; import org.springframework.boot.actuate.env.EnvironmentEndpoint; import org.springframework.boot.actuate.env.EnvironmentEndpointWebExtension; @@ -60,6 +61,7 @@ public class EnvironmentEndpointAutoConfiguration { @Bean @ConditionalOnMissingBean @ConditionalOnBean(EnvironmentEndpoint.class) + @ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB) public EnvironmentEndpointWebExtension environmentEndpointWebExtension(EnvironmentEndpoint environmentEndpoint) { return new EnvironmentEndpointWebExtension(environmentEndpoint); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfiguration.java index 3fedb6413b..d4a1e9e501 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfiguration.java @@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.quartz; import org.quartz.Scheduler; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; +import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure; import org.springframework.boot.actuate.quartz.QuartzEndpoint; import org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension; import org.springframework.boot.autoconfigure.AutoConfigureAfter; @@ -53,6 +54,7 @@ public class QuartzEndpointAutoConfiguration { @Bean @ConditionalOnBean(QuartzEndpoint.class) @ConditionalOnMissingBean + @ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB) public QuartzEndpointWebExtension quartzEndpointWebExtension(QuartzEndpoint endpoint) { return new QuartzEndpointWebExtension(endpoint); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java index 8c1bb8e426..eea25d9a7e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java @@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.cache; import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.cache.CachesEndpoint; +import org.springframework.boot.actuate.cache.CachesEndpointWebExtension; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.cache.CacheManager; @@ -64,4 +65,12 @@ class CachesEndpointAutoConfigurationTests { .run((context) -> assertThat(context).doesNotHaveBean(CachesEndpoint.class)); } + @Test + void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { + this.contextRunner.withBean(CacheManager.class, () -> mock(CacheManager.class)) + .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=caches") + .run((context) -> assertThat(context).hasSingleBean(CachesEndpoint.class) + .doesNotHaveBean(CachesEndpointWebExtension.class)); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java index 6a1173ee78..aa17bb56f1 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java @@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint; import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties; +import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpointWebExtension; import org.springframework.boot.actuate.endpoint.SanitizingFunction; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -102,6 +103,14 @@ class ConfigurationPropertiesReportEndpointAutoConfigurationTests { }; } + @Test + void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { + this.contextRunner + .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=configprops") + .run((context) -> assertThat(context).hasSingleBean(ConfigurationPropertiesReportEndpoint.class) + .doesNotHaveBean(ConfigurationPropertiesReportEndpointWebExtension.class)); + } + @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties static class Config { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java index 3facaf6098..f0f8135f20 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java @@ -25,6 +25,7 @@ import org.springframework.boot.actuate.env.EnvironmentEndpoint; import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor; import org.springframework.boot.actuate.env.EnvironmentEndpoint.PropertySourceDescriptor; import org.springframework.boot.actuate.env.EnvironmentEndpoint.PropertyValueDescriptor; +import org.springframework.boot.actuate.env.EnvironmentEndpointWebExtension; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.assertj.AssertableApplicationContext; import org.springframework.boot.test.context.runner.ApplicationContextRunner; @@ -109,6 +110,14 @@ class EnvironmentEndpointAutoConfigurationTests { .get(); } + @Test + void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { + this.contextRunner + .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=env") + .run((context) -> assertThat(context).hasSingleBean(EnvironmentEndpoint.class) + .doesNotHaveBean(EnvironmentEndpointWebExtension.class)); + } + @Configuration(proxyBeanMethods = false) static class SanitizingFunctionConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java index 5343b9b0de..a0f3229d25 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.quartz.Scheduler; import org.springframework.boot.actuate.quartz.QuartzEndpoint; +import org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; @@ -71,6 +72,14 @@ class QuartzEndpointAutoConfigurationTests { .run((context) -> assertThat(context).hasSingleBean(QuartzEndpoint.class).hasBean("customEndpoint")); } + @Test + void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { + this.contextRunner.withBean(Scheduler.class, () -> mock(Scheduler.class)) + .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=quartz") + .run((context) -> assertThat(context).hasSingleBean(QuartzEndpoint.class) + .doesNotHaveBean(QuartzEndpointWebExtension.class)); + } + @Configuration(proxyBeanMethods = false) static class CustomEndpointConfiguration { From 52ecc1e0dd31738472be7ac120017c7a68ae12f8 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 16 Nov 2021 08:22:35 +0100 Subject: [PATCH 2/2] Polish "Create EndpointWebExtension only if necessary" See gh-28475 --- .../cache/CachesEndpointAutoConfiguration.java | 2 +- .../CachesEndpointAutoConfigurationTests.java | 5 +++-- ...iesReportEndpointAutoConfigurationTests.java | 3 ++- ...vironmentEndpointAutoConfigurationTests.java | 17 +++++++++-------- .../QuartzEndpointAutoConfigurationTests.java | 3 ++- 5 files changed, 17 insertions(+), 13 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java index 16bd9503ff..e78a66e14f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java index eea25d9a7e..4c02aae4e2 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -68,7 +68,8 @@ class CachesEndpointAutoConfigurationTests { @Test void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { this.contextRunner.withBean(CacheManager.class, () -> mock(CacheManager.class)) - .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=caches") + .withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true", + "management.endpoints.jmx.exposure.include=caches") .run((context) -> assertThat(context).hasSingleBean(CachesEndpoint.class) .doesNotHaveBean(CachesEndpointWebExtension.class)); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java index aa17bb56f1..825950d511 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java @@ -106,7 +106,8 @@ class ConfigurationPropertiesReportEndpointAutoConfigurationTests { @Test void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { this.contextRunner - .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=configprops") + .withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true", + "management.endpoints.jmx.exposure.include=configprops") .run((context) -> assertThat(context).hasSingleBean(ConfigurationPropertiesReportEndpoint.class) .doesNotHaveBean(ConfigurationPropertiesReportEndpointWebExtension.class)); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java index f0f8135f20..467e77f5f1 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java @@ -94,6 +94,15 @@ class EnvironmentEndpointAutoConfigurationTests { .run(validateSystemProperties("******", "******")); } + @Test + void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { + this.contextRunner + .withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true", + "management.endpoints.jmx.exposure.include=env") + .run((context) -> assertThat(context).hasSingleBean(EnvironmentEndpoint.class) + .doesNotHaveBean(EnvironmentEndpointWebExtension.class)); + } + private ContextConsumer validateSystemProperties(String dbPassword, String apiKey) { return (context) -> { assertThat(context).hasSingleBean(EnvironmentEndpoint.class); @@ -110,14 +119,6 @@ class EnvironmentEndpointAutoConfigurationTests { .get(); } - @Test - void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { - this.contextRunner - .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=env") - .run((context) -> assertThat(context).hasSingleBean(EnvironmentEndpoint.class) - .doesNotHaveBean(EnvironmentEndpointWebExtension.class)); - } - @Configuration(proxyBeanMethods = false) static class SanitizingFunctionConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java index a0f3229d25..4b6cb39180 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java @@ -75,7 +75,8 @@ class QuartzEndpointAutoConfigurationTests { @Test void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() { this.contextRunner.withBean(Scheduler.class, () -> mock(Scheduler.class)) - .withPropertyValues("spring.jmx.enabled=true", "management.endpoints.jmx.exposure.include=quartz") + .withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true", + "management.endpoints.jmx.exposure.include=quartz") .run((context) -> assertThat(context).hasSingleBean(QuartzEndpoint.class) .doesNotHaveBean(QuartzEndpointWebExtension.class)); }