From 0483643e7f66fce077f5ce5018c946e8d39a8009 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 5 Oct 2022 18:54:38 +0200 Subject: [PATCH] Config client hints (#2174) --- .../client/ConfigClientAutoConfiguration.java | 33 +++++++++++++++++++ .../resources/META-INF/spring/aot.factories | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 spring-cloud-config-client/src/main/resources/META-INF/spring/aot.factories diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientAutoConfiguration.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientAutoConfiguration.java index c6f7e978..45880931 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientAutoConfiguration.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientAutoConfiguration.java @@ -16,6 +16,10 @@ package org.springframework.cloud.config.client; +import org.springframework.aot.hint.MemberCategory; +import org.springframework.aot.hint.RuntimeHints; +import org.springframework.aot.hint.RuntimeHintsRegistrar; +import org.springframework.aot.hint.TypeReference; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; @@ -24,7 +28,9 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.config.ConfigDataLocation; import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.cloud.config.environment.PropertySource; import org.springframework.cloud.context.refresh.ContextRefresher; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationListener; @@ -32,6 +38,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.Environment; +import org.springframework.util.ClassUtils; /** * Expose a ConfigClientProperties just so that there is a way to inspect the properties @@ -106,3 +113,29 @@ public class ConfigClientAutoConfiguration { } } + +class ConfigClientHints implements RuntimeHintsRegistrar { + + @Override + public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + if (!ClassUtils.isPresent("org.springframework.cloud.config.client.ConfigServerConfigDataLoader", + classLoader)) { + return; + } + hints.reflection() + .registerType(TypeReference.of(ConfigClientAutoConfiguration.class), + hint -> hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)) + .registerType(TypeReference.of(ConfigDataLocation.class), + hint -> hint.withMembers(MemberCategory.INVOKE_DECLARED_METHODS)) + .registerType(TypeReference.of("org.springframework.boot.context.config.ConfigDataProperties"), + hint -> hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, + MemberCategory.DECLARED_FIELDS, MemberCategory.INTROSPECT_DECLARED_METHODS)) + .registerType(TypeReference.of(org.springframework.cloud.config.environment.Environment.class), + hint -> hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, + MemberCategory.INTROSPECT_DECLARED_METHODS, MemberCategory.DECLARED_FIELDS)) + .registerType(TypeReference.of(PropertySource.class), + hint -> hint.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, + MemberCategory.INTROSPECT_DECLARED_METHODS, MemberCategory.DECLARED_FIELDS)); + } + +} diff --git a/spring-cloud-config-client/src/main/resources/META-INF/spring/aot.factories b/spring-cloud-config-client/src/main/resources/META-INF/spring/aot.factories new file mode 100644 index 00000000..b4ad6c7e --- /dev/null +++ b/spring-cloud-config-client/src/main/resources/META-INF/spring/aot.factories @@ -0,0 +1,2 @@ +org.springframework.aot.hint.RuntimeHintsRegistrar=\ +org.springframework.cloud.config.client.ConfigClientHints