mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-17 12:09:16 +00:00
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>
This commit is contained in:
committed by
Andy Wilkinson
parent
2f13d62aa4
commit
9cfa980a4d
+23
-16
@@ -58,6 +58,7 @@ import org.springframework.boot.jersey.actuate.endpoint.web.JerseyEndpointResour
|
||||
import org.springframework.boot.jersey.actuate.endpoint.web.JerseyHealthEndpointAdditionalPathResourceFactory;
|
||||
import org.springframework.boot.jersey.autoconfigure.ResourceConfigCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@@ -92,21 +93,6 @@ class JerseyWebEndpointManagementContextConfiguration {
|
||||
endpointMediaTypes, basePath, shouldRegisterLinks);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnManagementPort(ManagementPortType.DIFFERENT)
|
||||
@ConditionalOnBean(HealthEndpoint.class)
|
||||
@ConditionalOnAvailableEndpoint(endpoint = HealthEndpoint.class, exposure = EndpointExposure.WEB)
|
||||
JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar jerseyDifferentPortAdditionalHealthEndpointPathsResourcesRegistrar(
|
||||
WebEndpointsSupplier webEndpointsSupplier, HealthEndpointGroups healthEndpointGroups) {
|
||||
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
|
||||
ExposableWebEndpoint healthEndpoint = webEndpoints.stream()
|
||||
.filter((endpoint) -> endpoint.getEndpointId().equals(HEALTH_ENDPOINT_ID))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
return new JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar(healthEndpoint,
|
||||
healthEndpointGroups);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnBean(org.springframework.boot.actuate.endpoint.jackson.EndpointJackson2ObjectMapper.class)
|
||||
@SuppressWarnings("removal")
|
||||
@@ -122,6 +108,27 @@ class JerseyWebEndpointManagementContextConfiguration {
|
||||
|| ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnClass(HealthEndpoint.class)
|
||||
static class HealthConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnManagementPort(ManagementPortType.DIFFERENT)
|
||||
@ConditionalOnBean(HealthEndpoint.class)
|
||||
@ConditionalOnAvailableEndpoint(endpoint = HealthEndpoint.class, exposure = EndpointExposure.WEB)
|
||||
JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar jerseyDifferentPortAdditionalHealthEndpointPathsResourcesRegistrar(
|
||||
WebEndpointsSupplier webEndpointsSupplier, HealthEndpointGroups healthEndpointGroups) {
|
||||
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
|
||||
ExposableWebEndpoint healthEndpoint = webEndpoints.stream()
|
||||
.filter((endpoint) -> endpoint.getEndpointId().equals(HEALTH_ENDPOINT_ID))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
return new JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar(healthEndpoint,
|
||||
healthEndpointGroups);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Register endpoints with the {@link ResourceConfig} for the management context.
|
||||
*/
|
||||
@@ -178,7 +185,7 @@ class JerseyWebEndpointManagementContextConfiguration {
|
||||
|
||||
}
|
||||
|
||||
class JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar
|
||||
static class JerseyAdditionalHealthEndpointPathsManagementResourcesRegistrar
|
||||
implements ManagementContextResourceConfigCustomizer {
|
||||
|
||||
private final @Nullable ExposableWebEndpoint healthEndpoint;
|
||||
|
||||
+7
@@ -30,6 +30,7 @@ import org.springframework.boot.jersey.autoconfigure.actuate.web.JerseyWebEndpoi
|
||||
import org.springframework.boot.test.context.FilteredClassLoader;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
||||
import org.springframework.boot.testsupport.classpath.ClassPathExclusions;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@@ -52,6 +53,12 @@ class JerseyWebEndpointManagementContextConfigurationTests {
|
||||
this.runner.run((context) -> assertThat(context).hasSingleBean(JerseyWebEndpointsResourcesRegistrar.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ClassPathExclusions(packages = "org.springframework.boot.health.actuate.endpoint")
|
||||
void refreshSucceedsWithoutHealth() {
|
||||
this.runner.run((context) -> assertThat(context).hasNotFailed());
|
||||
}
|
||||
|
||||
@Test
|
||||
void autoConfigurationIsConditionalOnServletWebApplication() {
|
||||
ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
|
||||
Reference in New Issue
Block a user