如何使用AsyncConfigurer定义多个限定的线程池

时间:2016-11-09 10:34:01

标签: java spring asynchronous

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注释时,仍然无法识别该线程池。

那么,以这种方式配置多个线程池需要什么?或者根本不是这样的方式?

1 个答案:

答案 0 :(得分:2)

使用@Bean注释标记

add_action( 'save_post', 'set_post_meta_func');
function set_post_meta_func($post_id)
{
    /* return if not porpoerty post */
    $post_type = get_post_type($post_id);
    if ( "property" != $post_type ) 
        return;

    /* return if revision */
    if(wp_is_post_revision( $post_id ))
        return;

    /* return if not published */
    if("publish" != get_post_status($post_id))
        return;

    // unhook this function so it doesn't loop infinitely
    remove_action( 'save_post', 'set_post_meta_func' );
    // update the post, which calls save_post again
    update_post_meta($post_id, "REAL_HOMES_property_id", "your value here");
    // re-hook this function
    add_action( 'save_post', 'set_post_meta_func' );
}