
com.coveo.configuration.parameterstore.ParameterStorePropertySourceEnvironmentPostProcessor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of spring-boot-parameter-store-integration Show documentation
Show all versions of spring-boot-parameter-store-integration Show documentation
An integration of Amazon Web Services' Systems Manager Parameter Store for Spring Boot's properties injection.
The newest version!
package com.coveo.configuration.parameterstore;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.Profiles;
import org.springframework.util.ObjectUtils;
import com.coveo.configuration.parameterstore.strategy.ParameterStorePropertySourceConfigurationStrategy;
import com.coveo.configuration.parameterstore.strategy.ParameterStorePropertySourceConfigurationStrategyFactory;
import com.coveo.configuration.parameterstore.strategy.StrategyType;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.internal.retry.SdkDefaultRetrySetting;
import software.amazon.awssdk.core.retry.RetryMode;
import software.amazon.awssdk.services.ssm.SsmClient;
import software.amazon.awssdk.services.ssm.SsmClientBuilder;
public class ParameterStorePropertySourceEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered
{
static ParameterStorePropertySourceConfigurationStrategyFactory strategyFactory = new ParameterStorePropertySourceConfigurationStrategyFactory();
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application)
{
if (isParameterStorePropertySourceEnabled(environment)) {
getParameterStorePropertySourceConfigurationStrategy(environment).configureParameterStorePropertySources(environment,
preconfigureSSMClientBuilder(environment));
}
}
private SsmClientBuilder preconfigureSSMClientBuilder(ConfigurableEnvironment environment)
{
Integer maxRetries = environment.getProperty(ParameterStorePropertySourceConfigurationProperties.MAX_ERROR_RETRY,
Integer.class,
SdkDefaultRetrySetting.maxAttempts(RetryMode.STANDARD));
ClientOverrideConfiguration clientOverrideConfiguration = ClientOverrideConfiguration.builder()
.retryStrategy(configurator -> configurator.maxAttempts(maxRetries
+ 1))
.build();
return SsmClient.builder().overrideConfiguration(clientOverrideConfiguration);
}
private ParameterStorePropertySourceConfigurationStrategy getParameterStorePropertySourceConfigurationStrategy(ConfigurableEnvironment environment)
{
StrategyType type = isMultiRegionEnabled(environment) ? StrategyType.MULTI_REGION : StrategyType.DEFAULT;
return strategyFactory.getStrategy(type);
}
private boolean isParameterStorePropertySourceEnabled(ConfigurableEnvironment environment)
{
String[] userDefinedEnabledProfiles = environment.getProperty(ParameterStorePropertySourceConfigurationProperties.ACCEPTED_PROFILES,
String[].class);
return environment.getProperty(ParameterStorePropertySourceConfigurationProperties.ENABLED,
Boolean.class,
Boolean.FALSE)
|| environment.acceptsProfiles(Profiles.of(ParameterStorePropertySourceConfigurationProperties.ENABLED_PROFILE))
|| (!ObjectUtils.isEmpty(userDefinedEnabledProfiles)
&& environment.acceptsProfiles(Profiles.of(userDefinedEnabledProfiles)));
}
private boolean isMultiRegionEnabled(ConfigurableEnvironment environment)
{
return environment.containsProperty(ParameterStorePropertySourceConfigurationProperties.MULTI_REGION_SSM_CLIENT_REGIONS);
}
@Override
public int getOrder()
{
return Ordered.LOWEST_PRECEDENCE;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy