【发布时间】:2016-11-09 10:34:00
【问题描述】:
Spring 框架有一个接口 AsyncConfigurer(和 AsyncConfigurerSupport),用于配置拥有线程池执行器和能够异步运行方法(使用 @Async)所需的一切。
但通常情况下,在不同功能之间共享同一个线程池并不是一个好习惯,因此我通常用一个名称对它们进行限定,并在 Async 注释中指定该名称以使其使用一个特定的线程池。
问题是,我想通过这个方便的接口 AsyncConfigurer 来配置它们,并且不失资格,但我做不到。
试试这个:
@Configuration
@EnableAsync
public class PusherAsyncConfigurerSupport extends AsyncConfigurerSupport {
@Autowired
ExecutorConfig config;
@Override
@Qualifier(value = "executorOne")
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(config.getCorePoolSize());
...
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new MyAsyncUncaughtExceptionHandler();
}
}
当放入 Async 注释时,仍然无法识别该线程池。
那么,这样配置多个线程池需要什么?或者根本就不是这样?
【问题讨论】:
-
你怎么知道池没有被识别?
-
@kuhajeyan,它抛出一个异常,说没有那个名字的执行者。
标签: java spring asynchronous