首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring引导应用程序属性不在AWS环境中读取。

Spring引导应用程序属性不在AWS环境中读取。
EN

Stack Overflow用户
提问于 2022-07-15 04:22:51
回答 1查看 232关注 0票数 0

显然,我和我的团队正面临一个与我们的春季引导应用程序的application.yml文件相关的问题。我们试着解决这个问题已经超过三天了,但仍然找不出出了什么问题。

这个问题与application.ymlspring-cloud-starter-circuitbreaker-resilience4j中使用的2.1.3版本有关。与其他库相关的所有其他应用程序属性都正常工作。但是,在我的本地PC中,所有测试用例和Maven构建都是成功的,包括与Resilience4J相关的属性。当应用程序部署到AWS环境中时,就不会读取与Resilience4J相关的属性。

我不知道这是怎么回事。它在本地环境中工作良好,不工作于AWS环境,而只工作于与Resilience4J相关的应用程序属性。我也将添加我正在使用的应用程序属性。

代码语言:javascript
复制
resilience4j:
  circuitbreaker:
    instances:
      backendA:
        registerHealthIndicator: true
        slidingWindowSize: 3
        minimumNumberOfCalls: 4
        permittedNumberOfCallsInHalfOpenState: 3
        automaticTransitionFromOpenToHalfOpenEnabled: true
        waitDurationInOpenState: 10s
        failureRateThreshold: 50
        eventConsumerBufferSize: 10
        recordExceptions:
          - org.springframework.web.client.HttpServerErrorException
          - org.springframework.web.client.RestClientException
          - java.util.concurrent.TimeoutException
          - java.io.IOException
        ignoreExceptions:
          - org.springframework.web.client.ResourceAccessException

下面还添加了示例代码使用情况。

代码语言:javascript
复制
import org.springframework.cloud.client.circuitbreaker.CircuitBreaker;
import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;

  @Override
  public String getRemoteData(boolean isRequestTimeout) {
    CircuitBreaker circuitBreaker = circuitBreakerFactory.create("backendTest");

    String remoteUrl = url + "circuit-breaker/sample-data";

    if (isRequestTimeout) {
      remoteUrl = "http://localhost:8090/invalid-endpoint"; //invalid uri
    }
    String finalRemoteUrl = remoteUrl;
    return circuitBreaker.run(
        () -> {
          log.info("CircuitBreaker Caller Method");
          return longTimeoutRestTemplate.getForObject(finalRemoteUrl, String.class);
        }
        , throwable -> getDefaultList());
  }

我正在使用java 11,并在windows平台上使用maven 3.8.1在本地构建。在AWS中,我在amazon-linux平台上使用amazon-linux。这个问题听起来可能很奇怪,也不可能,但对于这种情况是如何发生的,我没有合理的解释。请帮我弄清楚,谢谢。

一些添加的新东西

如果我们声明另一个java类来获取这些应用程序属性并创建工厂bean,那么它就能工作了。

代码语言:javascript
复制
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> specificCustomConfiguration1() {

 TimeLimiterConfig timeLimiterConfig = TimeLimiterConfig.custom()
   .timeoutDuration(Duration.ofSeconds(4))
   .build();
 CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
   .failureRateThreshold(50)
   .waitDurationInOpenState(Duration.ofMillis(10000))
   .slidingWindowSize(2)
   .build();

 return factory -> factory.configure(builder -> builder.circuitBreakerConfig(circuitBreakerConfig)
   .timeLimiterConfig(timeLimiterConfig).build(), "backendTest");
}

这个手动@Bean创建不是强制性的,库应该读取application.yml文件并创建@Bean工厂。如果缺少上述代码,则使用默认配置属性创建工厂。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-27 08:11:37

我们在调查这个问题,但没有真正找出根本原因。然而,我们可以克服这个问题。我目前没有合理的解释来支持这个问题,但是无论如何,我会在这里提到它,因为如果遇到同样的问题,它可能会对某人有所帮助。

在从application.yml文件中删除以下配置后,我的问题得到了解决。

代码语言:javascript
复制
recordExceptions:
  - org.springframework.web.client.HttpServerErrorException
  - org.springframework.web.client.RestClientException
  - java.util.concurrent.TimeoutException
  - java.io.IOException
ignoreExceptions:
  - org.springframework.web.client.ResourceAccessException

同样,我不知道如何解释这个问题,但在我找出问题之前,这可能会有所帮助。谢谢!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72989018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档