首页 > 解决方案 > 通知单独的 JVM 执行任务

问题描述

所以我正在制作一个一次只运行一个实例的程序,并通过使用这个解决方案来做到这一点

但是现在我想这样做,如果用户尝试启动另一个实例,它将消耗该尝试并通知当前实例显示其 gui。

目前我正在考虑通过使用文件来做到这一点。show.stage在启动第二个实例时,将创建一个名为的文件。当另一个实例检测到该文件时,它将显示其 gui 并删除该文件。

我知道这行得通,但我想知道是否有更优雅的方式来做到这一点。

我能否设置一个环境标志,其他实例可以检查或通过套接字侦听器通知它,尽管其他实例似乎不鼓励这些。我觉得创建文件将是最简单和最可靠的方法,但我愿意接受任何建议

该程序将在普通窗口上运行。

标签: javasingle-instance

解决方案


有很多方法可以解决这个问题:

  • 正如您已经想到的,文件系统可以用作两个 jvm 之间的通信通道。但这仅适用于在同一台服务器上运行的 jvm。
  • 因此,已经建议的套接字解​​决方案使您能够(稍后)将相同的解决方案应用于分布式环境。缺点是您必须在非常低的级别上实现协议。
  • 过去,人们经常求助于消息总线解决方案(例如 ActiveMQ)
  • 在 2018 年,另一种选择是实现一个简单的 restful API,例如使用 jaxrs 和 jersey。

如前所述:您要为此付出的努力取决于您的要求。它将使用多长时间?您的解决方案将增长并且必须扩展到多台服务器的可能性有多大?!


推荐阅读