春ブーツで異なるThreadPoolTaskExecutorを作成する方法?

DDジン:

私は今使用しています@EnableAsyncし、@Async春ブーツでマルチスレッドを使用して注釈。私は(速い)、サービスAとサービスB(スロー)を持っています。

どのように私は彼らのために別のプールを設定することができますか?Bを求める声がたくさんあるときに、アプリケーションがまだBから別のプールでサービスAを処理することができます

@Configuration
@EnableAsync
public class ServiceExecutorConfig implements AsyncConfigurer {

    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setCorePoolSize(30);
        taskExecutor.setMaxPoolSize(40);
        taskExecutor.setQueueCapacity(10);
        taskExecutor.initialize();
        return taskExecutor;

    }
}
Razib:

まず第一に、あなたはあなたのスレッドプールエグゼキュータを定義し、このようなBeanとして構成し、それらをそれらを使用することができます -

@Configuration
public class ThreadConfig {
    @Bean
    public TaskExecutor executorA() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(4);
        executor.setMaxPoolSize(4);
        executor.setThreadNamePrefix("default_task_executor_thread");
        executor.initialize();
        return executor;
    } 

    @Bean
    public TaskExecutor executorB() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(4);
        executor.setMaxPoolSize(4);
        executor.setThreadNamePrefix("executor-B");
        executor.initialize();
        return executor;
    }
}  

その後、あなたは、このようなメソッドレベルであなたのexecutorを指定することができます -

@Async("executorA")
public void methodWithVoidReturnType(String s) {
    .....
}

@Async("executorA")
public Future<String> methodWithSomeReturnType() { 
   ...
   try {
      Thread.sleep(5000);
       return new AsyncResult<String>("hello world !!!!");
   } catch (InterruptedException e) {
      ...
   }

   return null;
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=230664&siteId=1