Allow @Async qualifier to be declared with a placeholder or SpEL expression
Closes gh-27818
This commit is contained in:
@@ -34,6 +34,8 @@ import org.springframework.beans.factory.BeanFactoryAware;
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.beans.factory.NoUniqueBeanDefinitionException;
|
||||
import org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
import org.springframework.beans.factory.config.EmbeddedValueResolver;
|
||||
import org.springframework.core.task.AsyncListenableTaskExecutor;
|
||||
import org.springframework.core.task.AsyncTaskExecutor;
|
||||
import org.springframework.core.task.TaskExecutor;
|
||||
@@ -41,6 +43,7 @@ import org.springframework.core.task.support.TaskExecutorAdapter;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.util.StringValueResolver;
|
||||
import org.springframework.util.concurrent.ListenableFuture;
|
||||
import org.springframework.util.function.SingletonSupplier;
|
||||
|
||||
@@ -208,6 +211,11 @@ public abstract class AsyncExecutionAspectSupport implements BeanFactoryAware {
|
||||
throw new IllegalStateException("BeanFactory must be set on " + getClass().getSimpleName() +
|
||||
" to access qualified executor '" + qualifier + "'");
|
||||
}
|
||||
if (beanFactory instanceof ConfigurableBeanFactory configurableBeanFactory) {
|
||||
StringValueResolver embeddedValueResolver = new EmbeddedValueResolver(configurableBeanFactory);
|
||||
String resolvedValue = embeddedValueResolver.resolveStringValue(qualifier);
|
||||
qualifier = resolvedValue != null ? resolvedValue : "";
|
||||
}
|
||||
return BeanFactoryAnnotationUtils.qualifiedBeanOfType(beanFactory, Executor.class, qualifier);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user