1
16
17 package org.springframework.cloud.aws.autoconfigure.context;
18
19 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
20 import org.springframework.boot.context.properties.ConfigurationProperties;
21 import org.springframework.cloud.aws.autoconfigure.context.properties.AwsRegionProperties;
22 import org.springframework.context.EnvironmentAware;
23 import org.springframework.context.annotation.Bean;
24 import org.springframework.context.annotation.Configuration;
25 import org.springframework.context.annotation.Import;
26 import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
27 import org.springframework.core.env.Environment;
28 import org.springframework.core.type.AnnotationMetadata;
29 import org.springframework.util.StringUtils;
30
31 import static org.springframework.cloud.aws.context.config.support.ContextConfigurationUtils.REGION_PROVIDER_BEAN_NAME;
32 import static org.springframework.cloud.aws.context.config.support.ContextConfigurationUtils.registerRegionProvider;
33
34
42 @Configuration(proxyBeanMethods = false)
43 @Import(ContextRegionProviderAutoConfiguration.Registrar.class)
44 public class ContextRegionProviderAutoConfiguration {
45
46
49 public static final String AWS_REGION_PROPERTIES_PREFIX = "cloud.aws.region";
50
51
55 @Bean
56 @ConfigurationProperties(prefix = AWS_REGION_PROPERTIES_PREFIX)
57 public AwsRegionProperties awsRegionProperties() {
58 return new AwsRegionProperties();
59 }
60
61 static class Registrar implements EnvironmentAware, ImportBeanDefinitionRegistrar {
62
63 private Environment environment;
64
65 @Override
66 public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
67 BeanDefinitionRegistry registry) {
68
69 if (registry.containsBeanDefinition(REGION_PROVIDER_BEAN_NAME)) {
70 return;
71 }
72
73 boolean useDefaultRegionChain = this.environment.getProperty(
74 AWS_REGION_PROPERTIES_PREFIX + ".use-default-aws-region-chain",
75 Boolean.class, false);
76
77 String staticRegion = this.environment
78 .getProperty(AWS_REGION_PROPERTIES_PREFIX + ".static");
79
80 boolean autoDetect = this.environment.getProperty(
81 AWS_REGION_PROPERTIES_PREFIX + ".auto", Boolean.class, true)
82 && !StringUtils.hasText(staticRegion);
83
84 registerRegionProvider(registry, autoDetect, useDefaultRegionChain,
85 staticRegion);
86 }
87
88 @Override
89 public void setEnvironment(Environment environment) {
90 this.environment = environment;
91 }
92
93 }
94
95 }
96