我想创建适当的无状态服务,即具有单例范围的bean,但有时候状态很小。我工作的应用程序中的当前候选者是
Future
s用于计划任务,以便以后能够按需取消 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 */ }
}
我确信这些要求会一直弹出。由于应该保存在内存中的数据不必保留,因为它只是从数据库中的数据派生的信息,因此以这种方式保持状态是否可接受?如果不是,有更好的方法吗?