Skip to content

Commit 62d87f9

Browse files
committed
Merge pull request #28475 from davidh44
* pr/28475: Polish "Create EndpointWebExtension only if necessary" Create EndpointWebExtension only if necessary Closes gh-28475
2 parents aaad772 + 52ecc1e commit 62d87f9

File tree

8 files changed

+50
-2
lines changed

8 files changed

+50
-2
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfiguration.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
1919
import java.util.Map;
2020

2121
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
22+
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure;
2223
import org.springframework.boot.actuate.cache.CachesEndpoint;
2324
import org.springframework.boot.actuate.cache.CachesEndpointWebExtension;
2425
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -53,6 +54,7 @@ public CachesEndpoint cachesEndpoint(Map<String, CacheManager> cacheManagers) {
5354
@Bean
5455
@ConditionalOnMissingBean
5556
@ConditionalOnBean(CachesEndpoint.class)
57+
@ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB)
5658
public CachesEndpointWebExtension cachesEndpointWebExtension(CachesEndpoint cachesEndpoint) {
5759
return new CachesEndpointWebExtension(cachesEndpoint);
5860
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.springframework.beans.factory.ObjectProvider;
2020
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
21+
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure;
2122
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint;
2223
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpointWebExtension;
2324
import org.springframework.boot.actuate.endpoint.SanitizingFunction;
@@ -62,6 +63,7 @@ public ConfigurationPropertiesReportEndpoint configurationPropertiesReportEndpoi
6263
@Bean
6364
@ConditionalOnMissingBean
6465
@ConditionalOnBean(ConfigurationPropertiesReportEndpoint.class)
66+
@ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB)
6567
public ConfigurationPropertiesReportEndpointWebExtension configurationPropertiesReportEndpointWebExtension(
6668
ConfigurationPropertiesReportEndpoint configurationPropertiesReportEndpoint) {
6769
return new ConfigurationPropertiesReportEndpointWebExtension(configurationPropertiesReportEndpoint);

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.springframework.beans.factory.ObjectProvider;
2020
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
21+
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure;
2122
import org.springframework.boot.actuate.endpoint.SanitizingFunction;
2223
import org.springframework.boot.actuate.env.EnvironmentEndpoint;
2324
import org.springframework.boot.actuate.env.EnvironmentEndpointWebExtension;
@@ -60,6 +61,7 @@ public EnvironmentEndpoint environmentEndpoint(Environment environment, Environm
6061
@Bean
6162
@ConditionalOnMissingBean
6263
@ConditionalOnBean(EnvironmentEndpoint.class)
64+
@ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB)
6365
public EnvironmentEndpointWebExtension environmentEndpointWebExtension(EnvironmentEndpoint environmentEndpoint) {
6466
return new EnvironmentEndpointWebExtension(environmentEndpoint);
6567
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.quartz.Scheduler;
2020

2121
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
22+
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure;
2223
import org.springframework.boot.actuate.quartz.QuartzEndpoint;
2324
import org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension;
2425
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
@@ -53,6 +54,7 @@ public QuartzEndpoint quartzEndpoint(Scheduler scheduler) {
5354
@Bean
5455
@ConditionalOnBean(QuartzEndpoint.class)
5556
@ConditionalOnMissingBean
57+
@ConditionalOnAvailableEndpoint(exposure = EndpointExposure.WEB)
5658
public QuartzEndpointWebExtension quartzEndpointWebExtension(QuartzEndpoint endpoint) {
5759
return new QuartzEndpointWebExtension(endpoint);
5860
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cache/CachesEndpointAutoConfigurationTests.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 the original author or authors.
2+
* Copyright 2012-2021 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -19,6 +19,7 @@
1919
import org.junit.jupiter.api.Test;
2020

2121
import org.springframework.boot.actuate.cache.CachesEndpoint;
22+
import org.springframework.boot.actuate.cache.CachesEndpointWebExtension;
2223
import org.springframework.boot.autoconfigure.AutoConfigurations;
2324
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2425
import org.springframework.cache.CacheManager;
@@ -64,4 +65,13 @@ void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() {
6465
.run((context) -> assertThat(context).doesNotHaveBean(CachesEndpoint.class));
6566
}
6667

68+
@Test
69+
void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() {
70+
this.contextRunner.withBean(CacheManager.class, () -> mock(CacheManager.class))
71+
.withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true",
72+
"management.endpoints.jmx.exposure.include=caches")
73+
.run((context) -> assertThat(context).hasSingleBean(CachesEndpoint.class)
74+
.doesNotHaveBean(CachesEndpointWebExtension.class));
75+
}
76+
6777
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/context/properties/ConfigurationPropertiesReportEndpointAutoConfigurationTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint;
2424
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpoint.ApplicationConfigurationProperties;
25+
import org.springframework.boot.actuate.context.properties.ConfigurationPropertiesReportEndpointWebExtension;
2526
import org.springframework.boot.actuate.endpoint.SanitizingFunction;
2627
import org.springframework.boot.autoconfigure.AutoConfigurations;
2728
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -102,6 +103,15 @@ private ContextConsumer<AssertableApplicationContext> validateTestProperties(Str
102103
};
103104
}
104105

106+
@Test
107+
void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() {
108+
this.contextRunner
109+
.withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true",
110+
"management.endpoints.jmx.exposure.include=configprops")
111+
.run((context) -> assertThat(context).hasSingleBean(ConfigurationPropertiesReportEndpoint.class)
112+
.doesNotHaveBean(ConfigurationPropertiesReportEndpointWebExtension.class));
113+
}
114+
105115
@Configuration(proxyBeanMethods = false)
106116
@EnableConfigurationProperties
107117
static class Config {

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfigurationTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.boot.actuate.env.EnvironmentEndpoint.EnvironmentDescriptor;
2626
import org.springframework.boot.actuate.env.EnvironmentEndpoint.PropertySourceDescriptor;
2727
import org.springframework.boot.actuate.env.EnvironmentEndpoint.PropertyValueDescriptor;
28+
import org.springframework.boot.actuate.env.EnvironmentEndpointWebExtension;
2829
import org.springframework.boot.autoconfigure.AutoConfigurations;
2930
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
3031
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -93,6 +94,15 @@ void additionalKeysToSanitizeCanBeConfiguredViaTheEnvironment() {
9394
.run(validateSystemProperties("******", "******"));
9495
}
9596

97+
@Test
98+
void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() {
99+
this.contextRunner
100+
.withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true",
101+
"management.endpoints.jmx.exposure.include=env")
102+
.run((context) -> assertThat(context).hasSingleBean(EnvironmentEndpoint.class)
103+
.doesNotHaveBean(EnvironmentEndpointWebExtension.class));
104+
}
105+
96106
private ContextConsumer<AssertableApplicationContext> validateSystemProperties(String dbPassword, String apiKey) {
97107
return (context) -> {
98108
assertThat(context).hasSingleBean(EnvironmentEndpoint.class);

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/quartz/QuartzEndpointAutoConfigurationTests.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.quartz.Scheduler;
2121

2222
import org.springframework.boot.actuate.quartz.QuartzEndpoint;
23+
import org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension;
2324
import org.springframework.boot.autoconfigure.AutoConfigurations;
2425
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2526
import org.springframework.context.annotation.Bean;
@@ -71,6 +72,15 @@ void endpointBacksOffWhenUserProvidedEndpointIsPresent() {
7172
.run((context) -> assertThat(context).hasSingleBean(QuartzEndpoint.class).hasBean("customEndpoint"));
7273
}
7374

75+
@Test
76+
void runWhenOnlyExposedOverJmxShouldHaveEndpointBeanWithoutWebExtension() {
77+
this.contextRunner.withBean(Scheduler.class, () -> mock(Scheduler.class))
78+
.withPropertyValues("management.endpoints.web.exposure.include=info", "spring.jmx.enabled=true",
79+
"management.endpoints.jmx.exposure.include=quartz")
80+
.run((context) -> assertThat(context).hasSingleBean(QuartzEndpoint.class)
81+
.doesNotHaveBean(QuartzEndpointWebExtension.class));
82+
}
83+
7484
@Configuration(proxyBeanMethods = false)
7585
static class CustomEndpointConfiguration {
7686

0 commit comments

Comments
 (0)