Java 跨多个服务器实例更新静态变量 我有一个静态变量,我通过管理控制台更新该变量。在静态变量和数据库中都会更新信息 问题是我们有多个服务器实例 当我通过一个服务器实例更新信息时,它会正确地更新值,但问题是静态变量 静态变量在我添加数据的服务器实例中更新,但在其他服务器实例中不更新

Java 跨多个服务器实例更新静态变量 我有一个静态变量,我通过管理控制台更新该变量。在静态变量和数据库中都会更新信息 问题是我们有多个服务器实例 当我通过一个服务器实例更新信息时,它会正确地更新值,但问题是静态变量 静态变量在我添加数据的服务器实例中更新,但在其他服务器实例中不更新,java,server,Java,Server,我可以在某个周期性的时间跨度内更新静态变量,但是有没有其他方法可以处理这个问题 提前感谢:-) 您可以在应用程序中创建后台进程,以指定的时间间隔轮询DB以获取此值。 这是最简单、最快的方法,但效率不高 您可以使用发布/订阅机制将此值推送到所有服务器。在大型系统中,它可以是zookeeper或一些JMS代理。若系统并没有那个么大,你们可以寻找一些嵌入式发布/订阅解决方案 您可以将静态变量存储在缓存中,而不是存储在每个服务器实例中。 每个服务器实例都从缓存中检索静态变量 直接将静态变量更新到DB,然

我可以在某个周期性的时间跨度内更新静态变量,但是有没有其他方法可以处理这个问题

提前感谢:-)

  • 您可以在应用程序中创建后台进程,以指定的时间间隔轮询DB以获取此值。 这是最简单、最快的方法,但效率不高
  • 您可以使用发布/订阅机制将此值推送到所有服务器。在大型系统中,它可以是zookeeper或一些JMS代理。若系统并没有那个么大,你们可以寻找一些嵌入式发布/订阅解决方案

  • 您可以将静态变量存储在缓存中,而不是存储在每个服务器实例中。 每个服务器实例都从缓存中检索静态变量


    直接将静态变量更新到DB,然后重新加载缓存。

    为什么不能检查所有服务器并更新变量?不能神奇地在远程JVM中“注入”静态变量的更新。您必须在服务器上创建一些接口来拦截更新命令。当这一切就绪时,您只需在服务器实例上循环并提交命令以更新每台服务器上的相关变量。一个简单的解决方案是创建一个简单的java servlet,但它假设每个实例都知道其他实例,从而调用servlet。此解决方案不可靠。你需要设计你的系统来处理连接问题、竞争条件、服务器故障。我已经想到了处理这个问题的第一种方法,但由于效率低下,我决定不使用它。关于第二种选择,我不能完全理解你想说的对不起。你能简单介绍一下吗?请阅读。有很多第三方提供可靠的发布/订阅消息。但它也有缺点——额外的基础设施对中小企业来说可能很昂贵。所以有一些更简单的嵌入式解决方案(只是java库)。您可以查看分布式缓存解决方案(google it)。我个人对黑泽尔卡斯特有经验。我的建议是“花1个小时来实现1个选项,当它是一个问题或确实需要时就忘记它”。保持简单其他实例如何知道它们需要重新加载缓存?其他服务器实例不需要知道重新加载缓存。所有服务器实例都从缓存中检索该值。更新数据库后重新加载缓存。那么问题是如何重新加载缓存?这取决于您如何设计缓存。例如,您可以为每个服务器设置REST接口,在更新数据库后调用REST服务。当然,你可以采取任何你想要的解决方案。