From aba47b00b5e974201235f4a2002698328ba084f6 Mon Sep 17 00:00:00 2001 From: tanruian Date: Tue, 17 Jun 2025 14:14:23 +0800 Subject: [PATCH] Improve performance by add enumerable propertySource Update `ManagementContextAutoConfiguration`. use an EnumerablePropertySource to provide better property binding performance Signed-off-by: tanruian --- .../ManagementContextAutoConfiguration.java | 52 ++++++++++++++----- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java index 760df4cc8f52..ff6b5d766db5 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementContextAutoConfiguration.java @@ -23,13 +23,15 @@ import org.springframework.boot.autoconfigure.AutoConfigureOrder; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.origin.Origin; +import org.springframework.boot.origin.OriginLookup; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.core.Ordered; import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.EnumerablePropertySource; import org.springframework.core.env.Environment; -import org.springframework.core.env.PropertySource; import org.springframework.util.Assert; /** @@ -84,17 +86,7 @@ private void verifyAddressConfiguration() { * @param environment the environment */ private void addLocalManagementPortPropertyAlias(ConfigurableEnvironment environment) { - environment.getPropertySources().addLast(new PropertySource<>("Management Server") { - - @Override - public Object getProperty(String name) { - if ("local.management.port".equals(name)) { - return environment.getProperty("local.server.port"); - } - return null; - } - - }); + environment.getPropertySources().addLast(new LocalManagementPortPropertySource(environment)); } @Configuration(proxyBeanMethods = false) @@ -117,4 +109,40 @@ static ChildManagementContextInitializer childManagementContextInitializer( } + static class LocalManagementPortPropertySource extends EnumerablePropertySource + implements OriginLookup { + + private static final String[] PROPERTIES = { "local.management.port" }; + + private final ConfigurableEnvironment environment; + + LocalManagementPortPropertySource(ConfigurableEnvironment environment) { + super("Management Server"); + this.environment = environment; + } + + @Override + public String[] getPropertyNames() { + return PROPERTIES; + } + + @Override + public Object getProperty(String name) { + if ("local.management.port".equals(name)) { + return this.environment.getProperty("local.server.port"); + } + return null; + } + + @Override + public Origin getOrigin(String key) { + return null; + } + + @Override + public boolean isImmutable() { + return true; + } + } + }