From f7079246cf6bfd2ad826a2ad10aa77e2ef8dae5d Mon Sep 17 00:00:00 2001 From: Ryan Baxter <524254+ryanjbaxter@users.noreply.github.com> Date: Fri, 13 Oct 2023 11:22:40 -0400 Subject: [PATCH] Align AWS Parameter Store Factory bean name with profile name --- .../config/server/composite/CompositeUtils.java | 4 +++- .../config/EnvironmentRepositoryConfiguration.java | 6 +++++- .../EnvironmentRepositoryConfigurationTests.java | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/composite/CompositeUtils.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/composite/CompositeUtils.java index dcc9a266de..17db28af7c 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/composite/CompositeUtils.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/composite/CompositeUtils.java @@ -31,6 +31,7 @@ import org.springframework.cloud.config.server.environment.EnvironmentRepositoryFactory; import org.springframework.core.env.Environment; import org.springframework.core.type.MethodMetadata; +import org.springframework.util.StringUtils; /** * @author Dylan Roberts @@ -62,7 +63,8 @@ public static List getCompositeTypeList(Environment environment) { public static String getFactoryName(String type, ConfigurableListableBeanFactory beanFactory) { String[] factoryNames = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(beanFactory, EnvironmentRepositoryFactory.class, true, false); - return Arrays.stream(factoryNames).filter(n -> n.startsWith(type)).findFirst().orElse(null); + return Arrays.stream(factoryNames).filter(n -> StringUtils.startsWithIgnoreCase(n, type)).findFirst() + .orElse(null); } /** diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java index 9ed4c71ee6..62e8eb87d4 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java @@ -237,7 +237,11 @@ public AwsSecretsManagerEnvironmentRepositoryFactory awsSecretsManagerEnvironmen @ConditionalOnClass(SsmClient.class) static class AwsParameterStoreFactoryConfig { - @Bean + //set the bean name explicitly since we assume the bean name will start with the profile + //name in the case of a composite configuration. The profile name is awsparamstore + //but the method name starts with awsParameterStore and the logic in CompositeUtils.getFactoryName + //will not find a match + @Bean(name = "awsparamstoreenvironmentrepositoryfactory") public AwsParameterStoreEnvironmentRepositoryFactory awsParameterStoreEnvironmentRepositoryFactory( ConfigServerProperties server) { return new AwsParameterStoreEnvironmentRepositoryFactory(server); diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java index 7d451d9501..3f491177c9 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfigurationTests.java @@ -23,6 +23,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.cloud.config.server.environment.AwsParameterStoreEnvironmentRepositoryFactory; import org.springframework.cloud.config.server.environment.ConfigTokenProvider; import org.springframework.cloud.config.server.environment.EnvironmentConfigTokenProvider; import org.springframework.cloud.config.server.environment.EnvironmentRepository; @@ -55,6 +56,19 @@ public void configTokenProviderCanBeOverridden() { }); } + @Test + public void awsParamStoreFactoryBeanExistsWithComposite() { + new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(EnvironmentRepositoryConfiguration.class, TestBeans.class)) + .withPropertyValues("spring.profiles.active=composite", + "spring.cloud.config.server.composite[0].type=awsparamstore", + "spring.cloud.config.server.composite[1].type=git", + "spring.cloud.config.server.composite[1].uri=https://test.com/Some-Test-Repo.git") + .run((context) -> { + assertThat(context.getBean(AwsParameterStoreEnvironmentRepositoryFactory.class)).isNotNull(); + }); + } + @Test public void customGitCredentialsProvider() { new ApplicationContextRunner()