Spring 3: How to call @Async annotated methods from the TaskExecutor
asynchronous, java, multithreading, spring, spring-mvc
Solution
Here's an example of `@Async` use:
@Async
void doSomething() {
// this will be executed asynchronously
}
Now call that method from another class and it will run asynchronously. If you want a return value use a `Future`
@Async
Future<String> returnSomething(int i) {
// this will be executed asynchronously
}
The relationship between `@Async` and `TaskExecutor` is that `@Async` uses a `TaskExecutor` behind the scenes. From the docs:
By default when specifying @Async on a method, the executor that will be used is the one supplied to the 'annotation-driven' element as described above. However, the value attribute of the @Async annotation can be used when needing to indicate that an executor other than the default should be used when executing a given method.
So to set up a default executor, add this to your spring config
<task:annotation-driven executor="myExecutor" />
Or to use a particular executor for a single use try
@Async("otherExecutor")
See http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/scheduling.html#scheduling-annotation-support-async
Problem
I'm new to asynchronous task execution in Spring, so please forgive me if this sounds like a silly question. I read that @Async annotation is introduced from Spring 3.x onward at method level to invocation of that method will occur asynchronously. I also read that we can configure the ThreadPoolTaskExecutor in the spring config file. What I'm not able to understand is that how to call a @Async annotated method from a tak executor lets suppose - AsyncTaskExecutor Earlier we used to do something like in a class: ``` @Autowired protected AsyncTaskExecutor executor; ``` And then ``` executor.submit(<Some Runnable or Callable task>) ``` I'm not able to understand the relationship between @Async annotated methods and TaskExecutor. I tried searching a lot over the internet but could not get anything on this. Can somebody provide an example for the same.