簡體   English   中英

Spring Async Executor:X時間后從隊列中刪除

[英]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分鍾未處理)

有沒有簡單的方法可以做到這一點? 我找不到。

您可以將ThreadPoolTask​​Executor包裝在一個自定義類中,該類將安排任務狀態的驗證,如果未完成,則將其取消。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM