適切なステートレス サービス、つまりシングルトン スコープの Bean を作成したいのですが、状態が忍び寄ることがあります。私が取り組んでいるアプリケーションの現在の候補は次のとおりです。
- データのキャッシュ
Future
後で必要に応じてキャンセルできるように、スケジュールされたタスクの を保持する
の単純化されたサンプル サービスは次Future
のようになります。
class SchedulingService {
@Autowired
TaskScheduler scheduler;
Map<String, ScheduledFuture> scheduledEvents = new HashMap<>();
public void scheduleTask(String id, MyTask task) {
if (scheduledEvents.containsKey(id)) {
scheduledEvents.remove(id).cancel(false);
}
persistTask(task)
scheduledEvents.put(id, scheduler.schedule(task, task.createTrigger()));
}
void persistTask(MyTask task) { /* persist logic here */ }
}
このような要件は常に発生すると確信しています。メモリに保持する必要があるデータは、データベース内のデータから派生した情報であるため、永続化する必要がないため、この方法で状態を保持することは許容されますか? そうでない場合、これを行うより良い方法はありますか?