春のブートアプリケーションでは、以下のように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 Retryアノテーションに挿入するにはどうすればよいですか?以下の例では、maxAttemptsの10
と500L
ofのバックオフ値を、対応する構成プロパティの参照に置き換えます。
@Retryable(maxAttempts=10, include=TimeoutException.class, backoff=@Backoff(value = 500L))
spring-retry-1.2. から開始すると、@ Retryableアノテーションで構成可能なプロパティを使用できます。
「maxAttemptsExpression」を使用します。使用方法については、以下のコードを参照してください。
@Retryable(maxAttemptsExpression = "#{${my.app.maxAttempts}}",
backoff = @Backoff(delayExpression = "#{${my.app. backOffDelay}}"))
1.2.0より前のバージョンを使用している場合は機能しません。また、構成可能なプロパティクラスを必要としません。
式属性で既存の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);
どこ
retryProperties
あなたの場合のように再試行関連のプロパティを保持するあなたのBeanです。
以下に示すようにSpring ELを使用して、プロパティをロードできます。
@Retryable(maxAttempts="${my.app.maxAttempts}",
include=TimeoutException.class,
backoff=@Backoff(value ="${my.app.backOffDelay}"))