如何在上下文初始化后更新 spring 重试属性
How to update spring retry attributes even after context initialised
我正在使用 spring-重试从 https://launchdarkly.com/ 加载的配置。我们有这个功能标志服务,我可以从功能标志更改 maxAttempts
和 interval
等配置。但是,spring-retry 没有反应。有什么方法可以检测这些新配置吗?
示例如下:
这是重试方法:
@Retryable(
exceptionExpression = "#{@config.isInExceptionListForReExecution(#root)}",
maxAttemptsExpression = "#{@config.getMaxAttemptsForReExecution()}",
backoff = @Backoff(delayExpression = "#{@config.getIntervalBetweenReExecution()}"))
@Transactional(value = "transactionManagerDC")
public CustomRule executeWithRetry(CustomRule customRule, SyncObject oldObject, SyncObject newObject, CustomRuleType type, Map<String, Object> kafkaEvent, Boolean strictValidation) {
int retry = RetrySynchronizationManager.getContext().getRetryCount();
logger.info("Start executing process [{}] for object [{}] with Retry [{}]", customRule.getId(), objectId, retry);
}
这是 config
bean,它注入功能标志服务并从标志中读取值。
@Service
class Config {
@Inject
private FeatureFlagService featureFlagService;
public boolean isInExceptionListForReExecution(Object exception1) {
String stringFlag = featureFlagService.getStringFlag("exceptionlist");
if (!stringFlag.contains(exception1.toString())) {
return true;
}
return false;
}
public int getMaxAttemptsForReExecution() {
int maxAttempts = featureFlagService.getIntFlag("maxAttempts");
return maxAttempts;
}
public int getIntervalBetweenReExecution() {
int interval = featureFlagService.getIntFlag("interval");
return interval;
}
}
如您所见,config
bean 将从标志中检索所有配置。现在,第一次配置检索的内容将保留下来。如果我更改配置,它将不会被考虑用于尝试和间隔。如何检测这种变化?或者需要为此重新启动应用程序。
配置表达式仅在上下文初始化期间计算一次。
有一个开放的新功能请求可以在运行时对其进行评估。
我正在使用 spring-重试从 https://launchdarkly.com/ 加载的配置。我们有这个功能标志服务,我可以从功能标志更改 maxAttempts
和 interval
等配置。但是,spring-retry 没有反应。有什么方法可以检测这些新配置吗?
示例如下:
这是重试方法:
@Retryable(
exceptionExpression = "#{@config.isInExceptionListForReExecution(#root)}",
maxAttemptsExpression = "#{@config.getMaxAttemptsForReExecution()}",
backoff = @Backoff(delayExpression = "#{@config.getIntervalBetweenReExecution()}"))
@Transactional(value = "transactionManagerDC")
public CustomRule executeWithRetry(CustomRule customRule, SyncObject oldObject, SyncObject newObject, CustomRuleType type, Map<String, Object> kafkaEvent, Boolean strictValidation) {
int retry = RetrySynchronizationManager.getContext().getRetryCount();
logger.info("Start executing process [{}] for object [{}] with Retry [{}]", customRule.getId(), objectId, retry);
}
这是 config
bean,它注入功能标志服务并从标志中读取值。
@Service
class Config {
@Inject
private FeatureFlagService featureFlagService;
public boolean isInExceptionListForReExecution(Object exception1) {
String stringFlag = featureFlagService.getStringFlag("exceptionlist");
if (!stringFlag.contains(exception1.toString())) {
return true;
}
return false;
}
public int getMaxAttemptsForReExecution() {
int maxAttempts = featureFlagService.getIntFlag("maxAttempts");
return maxAttempts;
}
public int getIntervalBetweenReExecution() {
int interval = featureFlagService.getIntFlag("interval");
return interval;
}
}
如您所见,config
bean 将从标志中检索所有配置。现在,第一次配置检索的内容将保留下来。如果我更改配置,它将不会被考虑用于尝试和间隔。如何检测这种变化?或者需要为此重新启动应用程序。
配置表达式仅在上下文初始化期间计算一次。
有一个开放的新功能请求可以在运行时对其进行评估。