Java 为什么使用数据库而不是单例bean字段?

Java 为什么使用数据库而不是单例bean字段?,java,spring-mvc,persistence,Java,Spring Mvc,Persistence,我的用例是一个实时SpringMVC应用程序,它处理少量快速搅动的非关键数据。数据由大约20个键值字符串对组成。它按计划从外部API中拉入,可由与webapp交互的最终用户修改,并用于在发送到计划中的另一个外部API的帖子中生成参数 这可能非常明显,可能太明显了,我在任何地方都找不到答案,但基本上,我为什么要将数据保存在DB中,而不是使用带有线程安全字段(如ConcurrentHashMap)的专用单例类,然后将其注入任何需要它的@服务中?我最初的感觉是,这样的类允许比内存中的DB更快的读/写,

我的用例是一个实时SpringMVC应用程序,它处理少量快速搅动的非关键数据。数据由大约20个键值字符串对组成。它按计划从外部API中拉入,可由与webapp交互的最终用户修改,并用于在发送到计划中的另一个外部API的帖子中生成参数

这可能非常明显,可能太明显了,我在任何地方都找不到答案,但基本上,我为什么要将数据保存在DB中,而不是使用带有线程安全字段(如ConcurrentHashMap)的专用单例类,然后将其注入任何需要它的@服务中?我最初的感觉是,这样的类允许比内存中的DB更快的读/写,但我看到的每个示例都依赖于适当的DB:

@Repository
public class DataStore{

  private Map data = new ConcurrentHashMap<String, String>();

  //...getters and setters etc..
}

谢谢你的任何想法

您可以使用ConcurrentMap将键/值对存储在内存中,没有问题。
但是适当的数据库主要为您提供持久性,当您重新启动应用程序时,数据仍然存在。DB还为您提供了原子性,映射本身不具备原子性,但是可以通过简单的锁定来添加原子性。

它基本上取决于您希望它的可靠性。这可能也值得考虑。请注意,此解决方案不会扩展—您将无法部署多个实例,因为每个实例都有独立的数据存储单例。你也可以想到一些类似的东西

ConcurrentHashMap没有那么专用。Java语言规范仍然警告不要依赖Map中提供的并发性。