Spring Boot - 用于设置TaskExecutor的任何快捷方式?

时间:2015-03-02 00:05:41

标签: spring-boot

只是想检查一下是否有人有更快的方法在Spring引导期间为Spring MVC设置TaskExecutor(使用自动配置)。这就是我到目前为止所做的:

@Bean
protected ThreadPoolTaskExecutor mvcTaskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setThreadNamePrefix("my-mvc-task-executor-");
    executor.setCorePoolSize(5);
    executor.setMaxPoolSize(200);
    return executor;
}

@Bean
protected WebMvcConfigurer webMvcConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
            configurer.setTaskExecutor(mvcTaskExecutor());
        }
    };
}

有没有人有更好/更快的方法来做到这一点?

-Joshua

1 个答案:

答案 0 :(得分:2)

实现这一目标的一种方法是使用Spring的ConcurrentTaskExceptor类。这个类充当Spring的TaskExecutor和JDK的Executor之间的适配器。

@Bean
protected WebMvcConfigurer webMvcConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
            configurer.setTaskExecutor(new ConcurrentTaskExecutor(Executors.newFixedThreadPool(5)));
        }
    };
}

上面的一个问题是您无法指定最大池大小。但是您始终可以创建一个新的工厂方法createThreadPool(int core, int max)来获取可配置的线程池。