SpringBootカスタムスレッドプール非同期タスクの実行
1426 ワード
スレッドプールの最初の登録
ステップ2非同期@EnableAsync
@ステップ3で使用するサービス層の使用方法に@Async(「taskExecutor」)を追加して、使用するスレッドプールを指定します.
結果を返すにはFutureオブジェクトを返すことができます
@Bean("taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(200);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("taskExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
ステップ2非同期@EnableAsync
@EnableAsync
@SpringBootApplication
@MapperScan("com.****.fusionlabel.mapper")
public class FusionLabelApplication {
public static void main(String[] args) {
SpringApplication.run(FusionLabelApplication.class, args);
}
}
@ステップ3で使用するサービス層の使用方法に@Async(「taskExecutor」)を追加して、使用するスレッドプールを指定します.
@Async("taskExecutor")
public void updateLibary(List remarks){
remarks.stream().filter(remark -> StringUtils.isNotEmpty(remark.getRevMark())).forEach( remark -> libraryMapper.updateById(remark));
}
結果を返すにはFutureオブジェクトを返すことができます
@Async("taskExecutor")
public Future doFuture(int i){
Future future = null;
future = new AsyncResult("success:" + i);
return future;
}