Skip to content

Commit 9cfa980

Browse files
dlwldnjs1009wilkinsona
authored andcommitted
Avoid loading health classes in Jersey config
Move the Jersey additional health endpoint paths registrar into a health-specific configuration so Jersey management endpoint support can refresh when spring-boot-health is absent. See gh-50858 Signed-off-by: Lee JiWon <dlwldnjs1009@gmail.com>
1 parent 2f13d62 commit 9cfa980

2 files changed

Lines changed: 30 additions & 16 deletions

File tree

module/spring-boot-jersey/src/main/java/org/springframework/boot/jersey/autoconfigure/actuate/web/JerseyWebEndpointManagementContextConfiguration.java

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
import org.springframework.boot.jersey.actuate.endpoint.web.JerseyHealthEndpointAdditionalPathResourceFactory;
5959
import org.springframework.boot.jersey.autoconfigure.ResourceConfigCustomizer;
6060
import org.springframework.context.annotation.Bean;
61+
import org.springframework.context.annotation.Configuration;
6162
import org.springframework.core.env.Environment;
6263
import org.springframework.util.StringUtils;
6364

@@ -92,21 +93,6 @@ JerseyWebEndpointsResourcesRegistrar jerseyWebEndpointsResourcesRegistrar(Enviro
9293
endpointMediaTypes, basePath, shouldRegisterLinks);
9394
}
9495

95-
@Bean
96-
@ConditionalOnManagementPort(ManagementPortType.DIFFERENT)
97-
@ConditionalOnBean(HealthEndpoint.class)
98-
@ConditionalOnAvailableEndpoint(endpoint = HealthEndpoint.class, exposure = EndpointExposure.WEB)
99-
JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar jerseyDifferentPortAdditionalHealthEndpointPathsResourcesRegistrar(
100-
WebEndpointsSupplier webEndpointsSupplier, HealthEndpointGroups healthEndpointGroups) {
101-
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
102-
ExposableWebEndpoint healthEndpoint = webEndpoints.stream()
103-
.filter((endpoint) -> endpoint.getEndpointId().equals(HEALTH_ENDPOINT_ID))
104-
.findFirst()
105-
.orElse(null);
106-
return new JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar(healthEndpoint,
107-
healthEndpointGroups);
108-
}
109-
11096
@Bean
11197
@ConditionalOnBean(org.springframework.boot.actuate.endpoint.jackson.EndpointJackson2ObjectMapper.class)
11298
@SuppressWarnings("removal")
@@ -122,6 +108,27 @@ private boolean shouldRegisterLinksMapping(WebEndpointProperties properties, Env
122108
|| ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
123109
}
124110

111+
@Configuration(proxyBeanMethods = false)
112+
@ConditionalOnClass(HealthEndpoint.class)
113+
static class HealthConfiguration {
114+
115+
@Bean
116+
@ConditionalOnManagementPort(ManagementPortType.DIFFERENT)
117+
@ConditionalOnBean(HealthEndpoint.class)
118+
@ConditionalOnAvailableEndpoint(endpoint = HealthEndpoint.class, exposure = EndpointExposure.WEB)
119+
JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar jerseyDifferentPortAdditionalHealthEndpointPathsResourcesRegistrar(
120+
WebEndpointsSupplier webEndpointsSupplier, HealthEndpointGroups healthEndpointGroups) {
121+
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
122+
ExposableWebEndpoint healthEndpoint = webEndpoints.stream()
123+
.filter((endpoint) -> endpoint.getEndpointId().equals(HEALTH_ENDPOINT_ID))
124+
.findFirst()
125+
.orElse(null);
126+
return new JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar(healthEndpoint,
127+
healthEndpointGroups);
128+
}
129+
130+
}
131+
125132
/**
126133
* Register endpoints with the {@link ResourceConfig} for the management context.
127134
*/
@@ -178,7 +185,7 @@ private void register(Collection<Resource> resources, ResourceConfig config) {
178185

179186
}
180187

181-
class JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar
188+
static class JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar
182189
implements ManagementContextResourceConfigCustomizer {
183190

184191
private final @Nullable ExposableWebEndpoint healthEndpoint;

module/spring-boot-jersey/src/test/java/org/springframework/boot/jersey/autoconfigure/actuate/web/JerseyWebEndpointManagementContextConfigurationTests.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.boot.test.context.FilteredClassLoader;
3131
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
3232
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
33+
import org.springframework.boot.testsupport.classpath.ClassPathExclusions;
3334

3435
import static org.assertj.core.api.Assertions.assertThat;
3536

@@ -52,6 +53,12 @@ void jerseyWebEndpointsResourcesRegistrarForEndpointsIsAutoConfigured() {
5253
this.runner.run((context) -> assertThat(context).hasSingleBean(JerseyWebEndpointsResourcesRegistrar.class));
5354
}
5455

56+
@Test
57+
@ClassPathExclusions(packages = "org.springframework.boot.health.actuate.endpoint")
58+
void refreshSucceedsWithoutHealth() {
59+
this.runner.run((context) -> assertThat(context).hasNotFailed());
60+
}
61+
5562
@Test
5663
void autoConfigurationIsConditionalOnServletWebApplication() {
5764
ApplicationContextRunner contextRunner = new ApplicationContextRunner()

0 commit comments

Comments
 (0)