Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集群环境中的Spring单例_Java_Spring_Jvm_Singleton_Cluster Computing - Fatal编程技术网

Java 集群环境中的Spring单例

Java 集群环境中的Spring单例,java,spring,jvm,singleton,cluster-computing,Java,Spring,Jvm,Singleton,Cluster Computing,正如在本文中所讨论的,在集群的环境中使用单例是不合适的(因为不同JVM中有多个单例对象),这对于Spring framework创建的单例必须是正确的 如果这是正确的,那么我们必须非常小心地使用Spring框架来使用单例类。你能告诉我这是不是正确的理解吗?情况未必如此 如果单独的JVM共享有意义的状态,那么跨它们使用单例是一个问题。例如,如果两个单独的实例存在于两个单独的应用程序服务器上,而这两个应用程序服务器都是同一应用程序的一部分,那么存储和发布递增ID的单例将非常危险 Spring中并没有

正如在本文中所讨论的,在集群的环境中使用单例是不合适的(因为不同JVM中有多个单例对象),这对于Spring framework创建的单例必须是正确的


如果这是正确的,那么我们必须非常小心地使用Spring框架来使用单例类。你能告诉我这是不是正确的理解吗?

情况未必如此

如果单独的JVM共享有意义的状态,那么跨它们使用单例是一个问题。例如,如果两个单独的实例存在于两个单独的应用程序服务器上,而这两个应用程序服务器都是同一应用程序的一部分,那么存储和发布递增ID的单例将非常危险

Spring中并没有任何固有的特性使得这个问题或多或少难以处理。您的SpringBean(可能的服务)应该致力于保持尽可能少的状态,这是一个良好实践。如果他们需要共享状态,那么您必须像处理任何其他共享状态一样解决此问题


很多人在集群环境中使用Spring,并且不会遇到与上述问题相关的任何问题。我是他们中的一员

这是一个老生常谈的答案,但线程安全又如何呢。假设我在服务类中有一个由锁(lock对象是实例字段)保护的服务代码的关键部分。多个实例将拥有单独的锁,试图使用相同的资源,从而导致争用。我说得对吗?你知道怎么处理吗?