Java 将易失性状态引入单态bean是否可以接受?

Java 将易失性状态引入单态bean是否可以接受?,java,spring,stateless,stateful,Java,Spring,Stateless,Stateful,我想创建适当的无状态服务,即具有单例作用域的bean,但有时会出现状态。我目前正在处理的申请中的候选人是 缓存数据 保留计划任务的Futures,以便在以后需要时取消它们 未来的简化示例服务可以是 class SchedulingService { @Autowired TaskScheduler scheduler; Map<String, ScheduledFuture> scheduledEvents = new HashMap<>(); p

我想创建适当的无状态服务,即具有单例作用域的bean,但有时会出现状态。我目前正在处理的申请中的候选人是

  • 缓存数据
  • 保留计划任务的
    Future
    s,以便在以后需要时取消它们
未来的简化示例服务可以是

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 */ }
}
类调度服务{
@自动连线
任务调度器;
Map scheduledEvents=new HashMap();
公共无效scheduleTask(字符串id,MyTask任务){
if(scheduledEvents.containsKey(id)){
scheduledEvents.remove(id).cancel(false);
}
持续性任务(任务)
scheduledEvents.put(id,scheduler.schedule(task,task.createTrigger());
}
void persistTask(MyTask任务){/*此处的persist逻辑*/}
}

我相信这样的需求会一直出现。既然应该保存在内存中的数据不必被持久化,因为它只是从数据库中的数据中派生出来的信息,那么以这种方式保存状态是否可以接受?如果不是的话,还有更好的方法吗?

我支持务实的方法,而且我真的不认为将状态保存在DB或bean上的缓存中有什么区别。但要始终注意过早优化!没有状态的缓存会很糟糕。不过,您需要处理同步,我认为每个规则都有例外;这看起来不错。请注意,您的实现不是线程安全的-这可能有点危险,因为您显然涉及线程。@Dave:True。我只是想问一下,万一有什么我不知道的特殊服务。春天是巨大的。我想这个实现对集群来说仍然是不好的,但这目前并不重要。现在,如果有人把它作为一个答案,我很乐意接受。如果我不得不根据你的评论回答我自己的问题,那将是一种耻辱。