我想创建适当的无状态服务,即具有单例范围的 bean,但有时会出现状态。我正在处理的应用程序中的当前候选人是
- 缓存数据
- 保留
Future
计划任务的 s 以便以后可以根据需要取消它们
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 */ }
}
我敢肯定,像这样的要求会一直出现。由于应该保存在内存中的数据不必被持久化,因为它只是从数据库中的数据派生的信息,以这种方式保存状态是否可以接受?如果没有,是否有更好的方法来做到这一点?