복붙노트

[SPRING] Spring에서 config 속성을 삽입하는 방법 Spring에서 다시 시도 주석을 재 시도 하시겠습니까?

SPRING

Spring에서 config 속성을 삽입하는 방법 Spring에서 다시 시도 주석을 재 시도 하시겠습니까?

스프링 부트 응용 프로그램에서는 yaml 파일에 다음과 같이 몇 가지 구성 등록 정보를 정의합니다.

my.app.maxAttempts = 10
my.app.backOffDelay = 500L

그리고 콩 예제

@ConfigurationProperties(prefix = "my.app")
public class ConfigProperties {
  private int maxAttempts;
  private long backOffDelay;

  public int getMaxAttempts() {
    return maxAttempts;
  }

  public void setMaxAttempts(int maxAttempts) {
    this.maxAttempts = maxAttempts;
  }

  public void setBackOffDelay(long backOffDelay) {
    this.backOffDelay = backOffDelay;
  }

  public long getBackOffDelay() {
    return backOffDelay;
  }

my.app.maxAttempts 및 my.app.backOffdelay 값을 Spring 재시도 주석에 삽입하려면 어떻게해야합니까? 아래의 예제에서 maxAttempts 값과 500Lof 백 오프 값을 config 속성의 해당 참조로 바꿉니다.

@Retryable(maxAttempts=10, include=TimeoutException.class, backoff=@Backoff(value = 500L))

해결법

  1. ==============================

    1.spring-retry-1.2.0을 보면 @Retryable 주석에서 구성 가능한 속성을 사용할 수 있습니다.

    spring-retry-1.2.0을 보면 @Retryable 주석에서 구성 가능한 속성을 사용할 수 있습니다.

    "maxAttemptsExpression"을 사용하십시오. 사용법은 아래 코드를 참조하십시오.

     @Retryable(maxAttemptsExpression = "#{${my.app.maxAttempts}}",
     backoff = @Backoff(delayExpression = "#{${my.app. backOffDelay}}"))
    

    1.2.0 미만의 버전을 사용하면 작동하지 않습니다. 또한 구성 가능한 속성 클래스가 필요하지 않습니다.

  2. ==============================

    2.expression 속성에서 기존 bean을 사용할 수도 있습니다.

    expression 속성에서 기존 bean을 사용할 수도 있습니다.

        @Retryable(include = RuntimeException.class,
               maxAttemptsExpression = "#{@retryProperties.getMaxAttempts()}",
               backoff = @Backoff(delayExpression = "#{@retryProperties.getBackOffInitialInterval()}",
                                  maxDelayExpression = "#{@retryProperties.getBackOffMaxInterval" + "()}",
                                  multiplierExpression = "#{@retryProperties.getBackOffIntervalMultiplier()}"))
        String perform();
    
        @Recover
        String recover(RuntimeException exception);
    

    어디에

    귀하의 경우처럼 재시도 관련 속성을 보유하고있는 귀하의 빈입니다.

  3. ==============================

    3.아래처럼 Spring EL을 사용하여 속성을로드 할 수 있습니다 :

    아래처럼 Spring EL을 사용하여 속성을로드 할 수 있습니다 :

    @Retryable(maxAttempts="${my.app.maxAttempts}", 
      include=TimeoutException.class, 
      backoff=@Backoff(value ="${my.app.backOffDelay}"))
    
  4. from https://stackoverflow.com/questions/43143806/how-to-inject-config-properties-in-spring-boot-to-spring-retry-annotation by cc-by-sa and MIT license