我有一个 Spring Boot 应用程序,负责通过 REST 应答请求。我还推送有关我的应用程序调用的指标。由于这是一项单独的任务,并且我必须立即响应用户,因此我希望异步发布该指标。所以我用过:
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(500);
executor.setThreadNamePrefix("MyApp-");
executor.initialize();
return executor;
然而,这个使用SimpleAsyncTaskExecutor
并且不重用任何线程。
1)我该如何使用ConcurrentTaskExecutor
代替SimpleAsyncTaskExecutor
?
2)哪种实现最适合我的需求?
要使您的自定义 Executor 工作,请确保它已注册为 Bean,并在注释为的方法上引用它@Async
:
@Bean(name = "transcodingPoolTaskExecutor")
public Executor transcodingPoolTaskExecutor() {
final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(2);
executor.setMaxPoolSize(2);
executor.setQueueCapacity(500);
executor.setThreadNamePrefix("transcoder-");
executor.initialize();
return executor;
}
并且在@Service
它持有该方法:
@Async("transcodingPoolTaskExecutor")
public void transcodeVideo(UUID fileId) {
mediaFileService.transcodeVideo(fileId);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)