[英]Spring Async Executor : remove from queue after x time
我在這里定義了一個Executor
:
@Bean("asyncExecutor")
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(appConfigProperties.getThreadpoolCorePoolSize());
executor.setMaxPoolSize(appConfigProperties.getThreadpoolMaxPoolSize());
executor.setQueueCapacity(appConfigProperties.getThreadpoolQueueCapacity());
executor.setThreadNamePrefix("threadPoolExecutor-");
executor.initialize();
return executor;
}
我希望能夠刪除隊列中停留時間超過X分鍾的任務(X分鍾未處理)
有沒有簡單的方法可以做到這一點? 我找不到。
您可以將ThreadPoolTaskExecutor包裝在一個自定義類中,該類將安排任務狀態的驗證,如果未完成,則將其取消。
public class CancellingExecutor implements Executor {
private final ExecutorService delegate;
private final ScheduledExecutorService monitoringExecutor;
public CancellingExecutor(final ExecutorService delegate,
final ScheduledExecutorService monitoringExecutor) {
this.delegate = delegate;
this.monitoringExecutor = monitoringExecutor;
}
@Override
public void execute(final Runnable command) {
Future<?> future = delegate.submit(command);
monitoringExecutor.schedule(() -> {
if (!future.isDone() && !future.isCancelled()) {
future.cancel(false);
}
}, 1, TimeUnit.MINUTES);
}
}
配置將如下所示:
@Bean("asyncExecutor")
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(appConfigProperties.getThreadpoolCorePoolSize());
executor.setMaxPoolSize(appConfigProperties.getThreadpoolMaxPoolSize());
executor.setQueueCapacity(appConfigProperties.getThreadpoolQueueCapacity());
executor.setThreadNamePrefix("threadPoolExecutor-");
executor.initialize();
ScheduledExecutorService monitoringExecutor = Executors.newScheduledThreadPool(1);
return new CancellingExecutor(executor, monitoringExecutor);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.