並行して同じ@Scheduled仕事のより多くの実行を実行するには?

MIREC:

私は仕事をしません。このような実装を持っています。ご覧のとおり、仕事は〜5秒かかりますし、上で実行する必要がありますfixedRate1秒。手段は〜ん、並列に実行されている5jobsませんが、春待ちを開始する前に別のものを仕事を終えるために...私は同じとパラメータを使って2つ目の@Scheduledジョブのスケジュール2」を追加した場合、私は並列に実行されている2つの異なる仕事を持っているが、そこでなければならないこと同じジョブ。これを達成することが何とか可能ですか?

@Scheduled(fixedRate = 1000)
private void schedule1() {
    int index = atomicInteger1.addAndGet(1); 
    logger.info("Run Schedule1 nr.{} started at: {}", index, LocalDateTime.now());
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    } finally {
        logger.info("Schedule1 nr.{} finished at: {}", index, LocalDateTime.now());
    }
}

@Bean(destroyMethod = "shutdown")
public Executor taskExecutor() {
    return Executors.newScheduledThreadPool(10);
}
Maroun:

各スケジュールされたタスクがします決してこのような場合には、並列に実行していません。タスクがかかるためです長く与えられたよりもfixedRateどうして?そのためScheduledExecutorService#scheduleAtFixedRate(太字は私です)と呼ばれ、ドキュメントが言うようにされています。

...このタスクのいずれかの実行はその期間よりも長くかかる場合、その後の実行が遅れて開始することができますが、同時に実行されません

これを解決する一つの方法は、使用している@Async@EnableAsync多くの例がで利用可能な春のドキュメント

@EnableAsync
public class Example {

  @Async
  @Scheduled(fixedRate = 1000)
  public void schedule1() throws InterruptedException {
    Thread.sleep(5000);
  }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=330153&siteId=1