Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple spring task executors with annotation-driven spring tasks

I have a class MessageProcessor being called by another method in another class (i.e. Caller).

public class Caller {
@Scheduled(filxedDelay=10)
public void poll(){
//do stuff
messageProcessor.process(msg);
}

}

public class MessageProcessor{

@Async(value="abcExecutor")
public void process(String msg){
//do stuff here.
}

}

Spring file looks like:

<task:executor id="abcExecutor" pool-size="9" rejection-policy-"CALLER_RUNS"/>

I want to add another @Async executor:

 @Async(value="defExecutor")
    public void remove(String msg){
    //do stuff here.
    }

@Scheduled(filxedDelay=10)
public void kill(){
//do stuff
messageProcessor.remove(msg);
}

By adding another executor in spring file:

<task:executor id="defExecutor" pool-size="9" rejection-policy="CALLER_RUNS"/>

But how to add multiple executors in <task:annotation-driven executor="abcExecutor" scheduler="scheduler" mode="proxy" proxy-target-class="true"/>

How can I make these multiple executors run with annotation?

PS: Obviously, I don't want to have the same pool being used for both the @Async methods

like image 624
instanceOfObject Avatar asked Jan 30 '14 10:01

instanceOfObject


1 Answers

The @Async("defExecutor") is sufficient to designate the method to be handled by the 2nd executor. The xml declaration specifies only the default executor, which will be used whenever no value is specified in @Async.

See the explanation of Chris Beams in this issue:

like image 76
Bozho Avatar answered Sep 23 '22 17:09

Bozho