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;
}