具有注释驱动的弹簧任务的多个弹簧任务执行器

时间:2014-01-30 10:53:14

标签: java spring scheduled-tasks spring-annotations

我有一个类MessageProcessor被另一个类中的另一个方法调用(即调用者)。

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文件看起来像:

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

我想添加另一个@Async执行器:

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

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

在spring文件中添加另一个执行程序:

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

但是如何在<task:annotation-driven executor="abcExecutor" scheduler="scheduler" mode="proxy" proxy-target-class="true"/>

中添加多个执行程序

如何使用注释运行这些多个执行程序?

PS :显然,我不希望同时使用相同的池    @Async方法

2 个答案:

答案 0 :(得分:12)

@Async("defExecutor")足以指定第二执行者要处理的方法。 xml声明仅指定默认执行程序,只要@Async中未指定任何值,就会使用该执行程序。

请参阅explanation of Chris Beams中的this issue

答案 1 :(得分:-2)

那么,它是一个正确的XML吗?

<task:executor id="abcExecutor" pool-size="9" rejection-policy-"CALLER_RUNS"/>
<task:executor id="defExecutor" pool-size="9" rejection-policy="CALLER_RUNS"/>
<task:annotation-driven executor="abcExecutor" scheduler="scheduler" mode="proxy" proxy-target-class="true"/>