Skip to content

Commit adf1e32

Browse files
committed
Move Actuator Jersey infrastructure to spring-boot-jersey
1 parent 04c01b3 commit adf1e32

File tree

33 files changed

+356
-186
lines changed

33 files changed

+356
-186
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration.imports

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
org.springframework.boot.actuate.autoconfigure.endpoint.web.jersey.JerseyWebEndpointManagementContextConfiguration
21
org.springframework.boot.actuate.autoconfigure.endpoint.web.reactive.WebFluxEndpointManagementContextConfiguration
32
org.springframework.boot.actuate.autoconfigure.endpoint.web.servlet.WebMvcEndpointManagementContextConfiguration
43
org.springframework.boot.actuate.autoconfigure.security.servlet.SecurityRequestMatchersManagementContextConfiguration
5-
org.springframework.boot.actuate.autoconfigure.web.jersey.JerseySameManagementContextConfiguration
6-
org.springframework.boot.actuate.autoconfigure.web.jersey.JerseyChildManagementContextConfiguration
74
org.springframework.boot.actuate.autoconfigure.web.reactive.ReactiveManagementChildContextConfiguration
85
org.springframework.boot.actuate.autoconfigure.web.server.jetty.JettyReactiveManagementChildContextConfiguration
96
org.springframework.boot.actuate.autoconfigure.web.server.jetty.JettyServletManagementChildContextConfiguration

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/integrationtest/JerseyHealthEndpointAdditionalPathIntegrationTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextAutoConfiguration;
2626
import org.springframework.boot.autoconfigure.AutoConfigurations;
2727
import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration;
28+
import org.springframework.boot.jersey.actuate.autoconfigure.health.HealthEndpointJerseyExtensionAutoConfiguration;
2829
import org.springframework.boot.jersey.autoconfigure.JerseyAutoConfiguration;
2930
import org.springframework.boot.test.context.FilteredClassLoader;
3031
import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext;
@@ -50,6 +51,7 @@ class JerseyHealthEndpointAdditionalPathIntegrationTests extends
5051
TomcatServletManagementContextAutoConfiguration.class, WebEndpointAutoConfiguration.class,
5152
JerseyAutoConfiguration.class, ManagementContextAutoConfiguration.class,
5253
ServletManagementContextAutoConfiguration.class, HealthEndpointAutoConfiguration.class,
54+
HealthEndpointJerseyExtensionAutoConfiguration.class,
5355
DiskSpaceHealthContributorAutoConfiguration.class))
5456
.withInitializer(new ServerPortInfoApplicationContextInitializer())
5557
.withClassLoader(new FilteredClassLoader(DispatcherServlet.class))

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseyChildManagementContextConfigurationTests.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import org.junit.jupiter.api.Test;
2222

2323
import org.springframework.boot.autoconfigure.AutoConfigurations;
24+
import org.springframework.boot.jersey.actuate.autoconfigure.web.JerseyChildManagementContextConfiguration;
25+
import org.springframework.boot.jersey.actuate.autoconfigure.web.JerseySameManagementContextConfiguration;
26+
import org.springframework.boot.jersey.actuate.autoconfigure.web.ManagementContextResourceConfigCustomizer;
2427
import org.springframework.boot.jersey.autoconfigure.JerseyApplicationPath;
2528
import org.springframework.boot.test.context.FilteredClassLoader;
2629
import org.springframework.boot.test.context.runner.ApplicationContextRunner;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/web/jersey/JerseySameManagementContextConfigurationTests.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.junit.jupiter.api.Test;
2222

2323
import org.springframework.boot.autoconfigure.AutoConfigurations;
24+
import org.springframework.boot.jersey.actuate.autoconfigure.web.JerseySameManagementContextConfiguration;
25+
import org.springframework.boot.jersey.actuate.autoconfigure.web.ManagementContextResourceConfigCustomizer;
2426
import org.springframework.boot.jersey.autoconfigure.DefaultJerseyApplicationPath;
2527
import org.springframework.boot.jersey.autoconfigure.JerseyApplicationPath;
2628
import org.springframework.boot.test.context.FilteredClassLoader;

spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextConfigurationImportSelectorTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ void selectImportsLoadsFromResources() {
7474
// Remove JerseySameManagementContextConfiguration, as it specifies
7575
// ManagementContextType.SAME and we asked for ManagementContextType.CHILD
7676
expected.remove(
77-
"org.springframework.boot.actuate.autoconfigure.web.jersey.JerseySameManagementContextConfiguration");
77+
"org.springframework.boot.jersey.actuate.autoconfigure.web.JerseySameManagementContextConfiguration");
7878
assertThat(imports).containsExactlyInAnyOrderElementsOf(expected);
7979
}
8080

spring-boot-project/spring-boot-actuator-autoconfigure/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ dependencies {
1212
api(project(":spring-boot-project:spring-boot-actuator"))
1313
api(project(":spring-boot-project:spring-boot-autoconfigure"))
1414

15-
optional(project(":spring-boot-project:spring-boot-jersey"))
1615
optional(project(":spring-boot-project:spring-boot-tomcat"))
1716
optional(project(":spring-boot-project:spring-boot-web-server"))
18-
17+
18+
optional("com.fasterxml.jackson.core:jackson-databind")
1919
optional("io.micrometer:micrometer-core")
2020
optional("io.projectreactor:reactor-core")
2121
optional("jakarta.servlet:jakarta.servlet-api")

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/endpoint/web/ServletEndpointManagementContextConfiguration.java

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,11 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.endpoint.web;
1818

19-
import org.glassfish.jersey.server.ResourceConfig;
20-
2119
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.IncludeExcludeEndpointFilter;
2220
import org.springframework.boot.actuate.autoconfigure.web.ManagementContextConfiguration;
23-
import org.springframework.boot.actuate.endpoint.EndpointAccessResolver;
24-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
25-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
2621
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
2722
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
28-
import org.springframework.boot.jersey.autoconfigure.JerseyApplicationPath;
2923
import org.springframework.context.annotation.Bean;
30-
import org.springframework.context.annotation.Configuration;
3124

3225
/**
3326
* {@link ManagementContextConfiguration @ManagementContextConfiguration} for servlet
@@ -52,22 +45,4 @@ public IncludeExcludeEndpointFilter<org.springframework.boot.actuate.endpoint.we
5245
exposure.getExclude());
5346
}
5447

55-
@Configuration(proxyBeanMethods = false)
56-
@ConditionalOnClass(ResourceConfig.class)
57-
@ConditionalOnMissingClass("org.springframework.web.servlet.DispatcherServlet")
58-
public static class JerseyServletEndpointManagementContextConfiguration {
59-
60-
@Bean
61-
@SuppressWarnings({ "deprecation", "removal" })
62-
public org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar servletEndpointRegistrar(
63-
WebEndpointProperties properties,
64-
org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier servletEndpointsSupplier,
65-
JerseyApplicationPath jerseyApplicationPath, EndpointAccessResolver endpointAccessResolver) {
66-
return new org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar(
67-
jerseyApplicationPath.getRelativePath(properties.getBasePath()),
68-
servletEndpointsSupplier.getEndpoints(), endpointAccessResolver);
69-
}
70-
71-
}
72-
7348
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointWebExtensionConfiguration.java

Lines changed: 0 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,21 @@
1717
package org.springframework.boot.actuate.autoconfigure.health;
1818

1919
import java.util.Collection;
20-
import java.util.Collections;
21-
import java.util.HashSet;
22-
import java.util.Objects;
2320

24-
import org.glassfish.jersey.server.ResourceConfig;
25-
import org.glassfish.jersey.server.model.Resource;
26-
import org.glassfish.jersey.servlet.ServletContainer;
27-
28-
import org.springframework.beans.factory.ObjectProvider;
2921
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
3022
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure;
31-
import org.springframework.boot.actuate.endpoint.web.EndpointMapping;
3223
import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint;
3324
import org.springframework.boot.actuate.endpoint.web.WebEndpointsSupplier;
3425
import org.springframework.boot.actuate.endpoint.web.WebServerNamespace;
35-
import org.springframework.boot.actuate.endpoint.web.jersey.JerseyHealthEndpointAdditionalPathResourceFactory;
3626
import org.springframework.boot.actuate.endpoint.web.servlet.AdditionalHealthEndpointPathsWebMvcHandlerMapping;
3727
import org.springframework.boot.actuate.health.HealthContributorRegistry;
3828
import org.springframework.boot.actuate.health.HealthEndpoint;
3929
import org.springframework.boot.actuate.health.HealthEndpointGroups;
4030
import org.springframework.boot.actuate.health.HealthEndpointWebExtension;
4131
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
42-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
4332
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
44-
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
4533
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
4634
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type;
47-
import org.springframework.boot.context.properties.EnableConfigurationProperties;
48-
import org.springframework.boot.jersey.autoconfigure.DefaultJerseyApplicationPath;
49-
import org.springframework.boot.jersey.autoconfigure.JerseyApplicationPath;
50-
import org.springframework.boot.jersey.autoconfigure.JerseyProperties;
51-
import org.springframework.boot.jersey.autoconfigure.ResourceConfigCustomizer;
52-
import org.springframework.boot.web.servlet.ServletRegistrationBean;
5335
import org.springframework.context.annotation.Bean;
5436
import org.springframework.context.annotation.Configuration;
5537
import org.springframework.web.servlet.DispatcherServlet;
@@ -96,81 +78,4 @@ AdditionalHealthEndpointPathsWebMvcHandlerMapping healthEndpointWebMvcHandlerMap
9678

9779
}
9880

99-
@Configuration(proxyBeanMethods = false)
100-
@ConditionalOnClass(ResourceConfig.class)
101-
@ConditionalOnMissingClass("org.springframework.web.servlet.DispatcherServlet")
102-
static class JerseyAdditionalHealthEndpointPathsConfiguration {
103-
104-
@Bean
105-
JerseyAdditionalHealthEndpointPathsResourcesRegistrar jerseyAdditionalHealthEndpointPathsResourcesRegistrar(
106-
WebEndpointsSupplier webEndpointsSupplier, HealthEndpointGroups healthEndpointGroups) {
107-
ExposableWebEndpoint health = getHealthEndpoint(webEndpointsSupplier);
108-
return new JerseyAdditionalHealthEndpointPathsResourcesRegistrar(health, healthEndpointGroups);
109-
}
110-
111-
@Configuration(proxyBeanMethods = false)
112-
@ConditionalOnMissingBean(ResourceConfig.class)
113-
@EnableConfigurationProperties(JerseyProperties.class)
114-
static class JerseyInfrastructureConfiguration {
115-
116-
@Bean
117-
@ConditionalOnMissingBean
118-
JerseyApplicationPath jerseyApplicationPath(JerseyProperties properties, ResourceConfig config) {
119-
return new DefaultJerseyApplicationPath(properties.getApplicationPath(), config);
120-
}
121-
122-
@Bean
123-
ResourceConfig resourceConfig(ObjectProvider<ResourceConfigCustomizer> resourceConfigCustomizers) {
124-
ResourceConfig resourceConfig = new ResourceConfig();
125-
resourceConfigCustomizers.orderedStream().forEach((customizer) -> customizer.customize(resourceConfig));
126-
return resourceConfig;
127-
}
128-
129-
@Bean
130-
ServletRegistrationBean<ServletContainer> jerseyServletRegistration(
131-
JerseyApplicationPath jerseyApplicationPath, ResourceConfig resourceConfig) {
132-
return new ServletRegistrationBean<>(new ServletContainer(resourceConfig),
133-
jerseyApplicationPath.getUrlMapping());
134-
}
135-
136-
}
137-
138-
}
139-
140-
static class JerseyAdditionalHealthEndpointPathsResourcesRegistrar implements ResourceConfigCustomizer {
141-
142-
private final ExposableWebEndpoint endpoint;
143-
144-
private final HealthEndpointGroups groups;
145-
146-
JerseyAdditionalHealthEndpointPathsResourcesRegistrar(ExposableWebEndpoint endpoint,
147-
HealthEndpointGroups groups) {
148-
this.endpoint = endpoint;
149-
this.groups = groups;
150-
}
151-
152-
@Override
153-
public void customize(ResourceConfig config) {
154-
register(config);
155-
}
156-
157-
private void register(ResourceConfig config) {
158-
EndpointMapping mapping = new EndpointMapping("");
159-
JerseyHealthEndpointAdditionalPathResourceFactory resourceFactory = new JerseyHealthEndpointAdditionalPathResourceFactory(
160-
WebServerNamespace.SERVER, this.groups);
161-
Collection<Resource> endpointResources = resourceFactory
162-
.createEndpointResources(mapping,
163-
(this.endpoint != null) ? Collections.singletonList(this.endpoint) : Collections.emptyList())
164-
.stream()
165-
.filter(Objects::nonNull)
166-
.toList();
167-
register(endpointResources, config);
168-
}
169-
170-
private void register(Collection<Resource> resources, ResourceConfig config) {
171-
config.registerResources(new HashSet<>(resources));
172-
}
173-
174-
}
175-
17681
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/health/HealthEndpointAutoConfigurationTests.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointAutoConfiguration;
2828
import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointConfiguration.HealthEndpointGroupMembershipValidator.NoSuchHealthContributorException;
2929
import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointReactiveWebExtensionConfiguration.WebFluxAdditionalHealthEndpointPathsConfiguration;
30-
import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration.JerseyAdditionalHealthEndpointPathsConfiguration;
3130
import org.springframework.boot.actuate.autoconfigure.health.HealthEndpointWebExtensionConfiguration.MvcAdditionalHealthEndpointPathsConfiguration;
3231
import org.springframework.boot.actuate.endpoint.ApiVersion;
3332
import org.springframework.boot.actuate.endpoint.SecurityContext;
@@ -355,20 +354,6 @@ void additionalHealthEndpointsPathsTolerateHealthEndpointThatIsNotWebExposed() {
355354
});
356355
}
357356

358-
@Test
359-
void additionalJerseyHealthEndpointsPathsTolerateHealthEndpointThatIsNotWebExposed() {
360-
this.contextRunner
361-
.withConfiguration(
362-
AutoConfigurations.of(EndpointAutoConfiguration.class, WebEndpointAutoConfiguration.class))
363-
.withClassLoader(new FilteredClassLoader(DispatcherServlet.class))
364-
.withPropertyValues("management.endpoints.web.exposure.exclude=*",
365-
"management.endpoints.cloudfoundry.exposure.include=*", "spring.main.cloud-platform=cloud_foundry")
366-
.run((context) -> {
367-
assertThat(context).hasSingleBean(JerseyAdditionalHealthEndpointPathsConfiguration.class);
368-
assertThat(context).hasNotFailed();
369-
});
370-
}
371-
372357
@Test
373358
void additionalReactiveHealthEndpointsPathsTolerateHealthEndpointThatIsNotWebExposed() {
374359
this.reactiveContextRunner

spring-boot-project/spring-boot-actuator-integration-tests/src/test/java/org/springframework/boot/actuate/endpoint/web/jersey/JerseyWebEndpointIntegrationTests.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes;
4141
import org.springframework.boot.actuate.endpoint.web.annotation.AbstractWebEndpointIntegrationTests;
4242
import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointDiscoverer;
43+
import org.springframework.boot.jersey.actuate.endpoint.web.JerseyEndpointResourceFactory;
4344
import org.springframework.boot.tomcat.servlet.TomcatServletWebServerFactory;
4445
import org.springframework.boot.web.server.servlet.context.AnnotationConfigServletWebServerApplicationContext;
4546
import org.springframework.boot.web.servlet.ServletRegistrationBean;

0 commit comments

Comments
 (0)