Allow thread dump endpoint to call ThreadMXBean in a native image

Closes gh-31680
This commit is contained in:
Andy Wilkinson
2022-10-04 16:58:08 +01:00
parent e6568596b9
commit 7c4e46e538
5 changed files with 6 additions and 183 deletions

View File

@@ -17,12 +17,9 @@
package org.springframework.boot.actuate.autoconfigure.management;
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint;
import org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure;
import org.springframework.boot.actuate.management.ThreadDumpEndpoint;
import org.springframework.boot.actuate.management.ThreadDumpEndpointWebExtension;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
@@ -42,12 +39,4 @@ public class ThreadDumpEndpointAutoConfiguration {
return new ThreadDumpEndpoint();
}
@Bean
@ConditionalOnMissingBean
@ConditionalOnBean(ThreadDumpEndpoint.class)
@ConditionalOnAvailableEndpoint(exposure = { EndpointExposure.WEB, EndpointExposure.CLOUD_FOUNDRY })
public ThreadDumpEndpointWebExtension threadDumpWebExtension(ThreadDumpEndpoint threadDumpEndpoint) {
return new ThreadDumpEndpointWebExtension(threadDumpEndpoint);
}
}

View File

@@ -19,7 +19,6 @@ package org.springframework.boot.actuate.autoconfigure.management;
import org.junit.jupiter.api.Test;
import org.springframework.boot.actuate.management.ThreadDumpEndpoint;
import org.springframework.boot.actuate.management.ThreadDumpEndpointWebExtension;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -38,27 +37,20 @@ class ThreadDumpEndpointAutoConfigurationTests {
@Test
void runShouldHaveEndpointBean() {
this.contextRunner.withPropertyValues("management.endpoints.web.exposure.include=threaddump").run((context) -> {
assertThat(context).hasSingleBean(ThreadDumpEndpoint.class);
assertThat(context).hasSingleBean(ThreadDumpEndpointWebExtension.class);
});
this.contextRunner.withPropertyValues("management.endpoints.web.exposure.include=threaddump")
.run((context) -> assertThat(context).hasSingleBean(ThreadDumpEndpoint.class));
}
@Test
void runWhenNotExposedShouldNotHaveEndpointBean() {
this.contextRunner.run((context) -> {
assertThat(context).doesNotHaveBean(ThreadDumpEndpoint.class);
assertThat(context).doesNotHaveBean(ThreadDumpEndpointWebExtension.class);
});
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(ThreadDumpEndpoint.class));
}
@Test
void runWhenEnabledPropertyIsFalseShouldNotHaveEndpointBean() {
this.contextRunner.withPropertyValues("management.endpoints.web.exposure.include=*")
.withPropertyValues("management.endpoint.threaddump.enabled:false").run((context) -> {
assertThat(context).doesNotHaveBean(ThreadDumpEndpoint.class);
assertThat(context).doesNotHaveBean(ThreadDumpEndpointWebExtension.class);
});
.withPropertyValues("management.endpoint.threaddump.enabled:false")
.run((context) -> assertThat(context).doesNotHaveBean(ThreadDumpEndpoint.class));
}
}