2017-01-09 10 views
0

私は、フィールド "作成時間"を持つデータのキューを持っています。キューにアイテムを昇順で作成した時間順に挿入します。これで、キュー内のすべての最初のエントリの作成された時刻にプロセスを実行する必要があり、1回だけ実行する必要があります。春のブートでランダムな時間にプロセスをスケジュール

例 -

5時間
1と、キューの中のエントリ)1:00
2)1時15分
3)1時20
4)1時30分
があります。 5)2時

だから私のスケジュールされたプロセスは、1時20分で、その後1:20 pmに、その後午後1時15分で、その後午後1時に実行する必要があり、最後に午後2時過ぎず、一定時間後に再発します。

私はスプリングブーツを使用しています。これを春に行う方法はありますか?

@Bean 
public TaskScheduler taskScheduler() 
{ 
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); 
    taskScheduler.initialize(); 
    return taskScheduler; 
} 

その後、あなたは、スケジューラを使用してsumularな方法であなたのキューを処理することができます:

+0

cronトリガーを使用して、これらの時間をすべて定義できます:https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#scheduling-trigger -implementations – user1121883

+0

'@ Scheduled'アノテーションを使うことができます。あるいは' Spring-boot'と 'Quartz'を使って良い組み合わせがあります。しかし、コードがないので、私たちはあなたを助けることができるので、私はあなたの質問に話題としてフラグを立てなければなりません。 – Patrick

+0

しかし、これは待ち行列なので、いつでも待ち行列に入ることができます。私は自分自身でジョブがいつ実行されるかを決めることができません。 – sid297

答えて

0

あなたは基本的にScheduledThreadPoolExecutorのラッパーである、例えば、実装ThreadPoolTask​​Schedulerとして使用するTaskSchedulerを設定することができ

public class MyQueueParser 
{ 
    @Autowired 
    private TaskScheduler scheduler; 

    public void parseQueue() 
    { 
     for (Item item: myQueue) 
     { 
      scheduler.schedule(() -> { 
       // do the work 
      }, item.getCreationTime()); 
     } 
    } 
} 

スケジューラは実行可能なrunnableと実行する時刻をとります。 TaskSchedulerでは、トリガーを使用することもできます。ドキュメントを確認してくださいhere

関連する問題