startDate、endDate、および発生(毎時、毎日、毎週、毎月、月曜日など) に基づいてリマインダーを送信する Java のスケジューリング システムに取り組んでいます。もともと、リマインダーをスケジュールするためにTimerおよびTimerTaskクラスを使用していました。
Timer timer = new Timer();
timer.scheduleAtFixedRate(reminder, firstDate, period);
最近、 ScheduledExecutorServiceに切り替えたので、イベントのキャンセルをより細かく制御できるようになりました。ScheduledExecutorServiceは、過去の startDate でリマインダーを再スケジュールする 1 つのケースを除いて、定期的なリマインダーに対してうまく機能しています。scheduleAtFixedRate関数では、実際のDateオブジェクトではなく、 initialDelayにlong値のみを指定できます。
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(reminder, initialDelay, period, unit);
負のinitialDelayを渡すと、イベントがすぐに発生し、 startDate + periodではなくnow + periodで再発するため、これは問題を引き起こします。
過去のstartDateでリマインダーを (再) スケジュールする方法はありますか?