假设您有一台机器,上面有多个配置不同的 JVM。有没有办法从每个人那里获取 GUID/UUID 以传递到在其上运行的应用程序?不是 JVM 的实例,而是启动进程的特定 JVM。我可以编写一个程序来查找机器上的所有 JVM,并为它们提供一些元数据以在 ClassLoader 阶段(或其他阶段)将其拉入应用程序。
我在 .NET 领域已经有一段时间了,忘记了在 Java 中解决这个问题的最简单方法是什么。如果 Java 中已经内置了一些东西可以很好地为每个 JVM 执行此操作,否则我愿意采用单独的分配阶段路线。
最终目标是流经系统的每个事务都将有一个与之关联的主 GUID...但是我还想将工作的每个部分标记在一个“作业”中,并使用执行该部分的 JVM工作。考虑每台机器多个 JVM,也许以后……多台机器。
注意:如果用户觉得我使用了错误的标签,请修改它们。谢谢。
最佳答案
这是解决您的用例的可能方法。我们可以指定 JVM arguments我们可以使用 -D 选项指定属性。然后,所有类都可以在 JVM 的整个生命周期内将这些属性作为系统属性进行访问。
例如,假设我们启动了一个 Java 程序,如下所示:
java MyProgram -DJVMID=A18342FB-68DD-4C64-B606-301366B8ABB0
现在在 Java 程序中,无论您打算记录 JVM 的 ID,您需要做的就是以下操作:
String jvmID = (String)(System.getProperty("JVMID");
//log the JVM ID
logger.log(jvmID + " : " + " Activity happened");
请注意,除了 UUID,您还可以在此处使用您自己的可读字符串作为 JVM id。
如果您想将属性文件与包含各种 JVM 属性的 JVM 相关联;这是你如何做到的。假设属性文件的名称是 MyProgram.properties。
我们如下启动 JVM
java MyProgram -DPROPERTIES_FILE=MyProgram.properties
然后您可以加载属性文件,如下所示。这取自 Oracle docs :
public static void main(String[] args)
{
// set up new properties object
// from file "myProperties.txt"
String propertyFiletoLoad = (String)(System.getProperty("PROPERTIES_FILE"));
FileInputStream propFile =
new FileInputStream( propertyFileToLoad);
Properties p =
new Properties();
p.load(propFile);
// set the system properties
System.setProperties(p);
}
在 main()
中完成上述操作后,您只需调用 System.getProperty("propertyName"); 就可以访问 Java 程序中任何地方所需的任何属性;
希望这对您有所帮助。
关于java - 来自 JVM 的用于跟踪目的的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837626/