Package org.springframework.scheduling.annotation

# Annotation Interface Async

@Target({TYPE,METHOD}) @Retention(RUNTIME) @Documented @Reflective public @interface Async
Annotation that marks a method as a candidate for asynchronous execution.

Can also be used at the type level, in which case all the type's methods are considered as asynchronous. Note, however, that `@Async` is not supported on methods declared within a `@Configuration` class.

In terms of target method signatures, any parameter types are supported. However, the return type is constrained to either `void` or `Future`. In the latter case, you may declare the more specific `CompletableFuture` type which allows for richer interaction with the asynchronous task and for immediate composition with further processing steps.

A `Future` handle returned from the proxy will be an actual asynchronous `(Completable)Future` that can be used to track the result of the asynchronous method execution. However, since the target method needs to implement the same signature, it will have to return a temporary `Future` handle that just passes a value after computation in the execution thread: typically through `CompletableFuture.completedFuture(Object)`. The provided value will be exposed to the caller through the actual asynchronous `Future` handle at runtime.

Since:
  3.0
Author:
  Juergen Hoeller, Chris Beams
See Also:
  - `AnnotationAsyncExecutionInterceptor`
  - `AsyncAnnotationAdvisor`

## Optional Element Summary

Optional Elements
Modifier and Type
Optional Element
Description
`String`
`value`
A qualifier value for the specified asynchronous operation(s).

## Element Details

### value

String value
A qualifier value for the specified asynchronous operation(s).

May be used to determine the target executor to be used when executing the asynchronous operation(s), matching the qualifier value (or the bean name) of a specific `Executor` or `TaskExecutor` bean definition.

When specified in a class-level `@Async` annotation, indicates that the given executor should be used for all methods within the class. Method-level use of `Async#value` always overrides any qualifier value configured at the class level.

The qualifier value will be resolved dynamically if supplied as a SpEL expression (for example, `"#{environment['myExecutor']}"`) or a property placeholder (for example, `"${my.app.myExecutor}"`).

Since:
  3.1.2

Default:
  ""