禁用Spring Cloud AWS自动配置以进行本地开发

del*_*svb 12 java spring maven spring-cloud

我使用以下Maven依赖项来自动配置所有必要的参数,以使我的项目在AWS上运行:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-aws</artifactId>
    <version>1.2.2.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我没有任何关键功能,具体取决于AWS,它只是在运行时从S3加载一些文件.因此,在本地开发(以及测试)期间,我不需要任何AWS自动配置.

我在本地运行时得到的逻辑错误是:

...
Caused by: java.lang.IllegalStateException: There is no EC2 meta data available, because the application is not running in the EC2 environment. Region detection is only possible if the application is running on a EC2 instance
    at org.springframework.util.Assert.state(Assert.java:392) ~[spring-core-4.3.2.RELEASE.jar:4.3.2.RELEASE]
    at org.springframework.cloud.aws.core.region.Ec2MetadataRegionProvider.getRegion(Ec2MetadataRegionProvider.java:39) ~[spring-cloud-aws-core-1.2.2.RELEASE.jar:1.2.2.RELEASE]
    at org.springframework.cloud.aws.core.config.AmazonWebserviceClientFactoryBean.createInstance(AmazonWebserviceClientFactoryBean.java:98) ~[spring-cloud-aws-core-1.2.2.RELEASE.jar:1.2.2.RELEASE]
    at org.springframework.cloud.aws.core.config.AmazonWebserviceClientFactoryBean.createInstance(AmazonWebserviceClientFactoryBean.java:44) ~[spring-cloud-aws-core-1.2.2.RELEASE.jar:1.2.2.RELEASE]
...
Run Code Online (Sandbox Code Playgroud)

对于测试和本地开发,是否有一个干净,可行的解决方案?

del*_*svb 13

我使用surefire插件为测试解决了这个问题:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <configuration>
        <classpathDependencyExcludes>
            <classpathDependencyExcludes>org.springframework.cloud:spring-cloud-aws-autoconfigure</classpathDependencyExcludes>
        </classpathDependencyExcludes>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

解决了本地开发,将以下变量设置为VM参数或在Spring Cloud Config Server中:

cloud.aws.region.auto=false
cloud.aws.region.static=us-east-1
Run Code Online (Sandbox Code Playgroud)

您可以使用任何值cloud.aws.region.static,但必须有一个.

我在不同的地方阅读了这两种解决方案,并认为它可能有助于将来将这些解决方案结合在一起.

  • 我想知道是否有基于弹簧配置文件的解决方案。例如,我通过添加以下内容禁用了特定配置文件的 spring 安全性: spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration (2认同)