Java 用于跟踪目的的JVM的唯一ID

Java 用于跟踪目的的JVM的唯一ID,java,transactions,jvm,Java,Transactions,Jvm,假设您有一台机器,上面有多个配置不同的JVM。有没有一种方法可以从每个应用程序中获取GUID/UUID,并将其传递到在其上运行的应用程序中?不是JVM的实例,而是启动进程的特定JVM。我可以编写一个程序,查找机器上的所有JVM,并给它们一些元数据,以便在类加载器阶段(或其他阶段)将其拉入应用程序 我已经在.NET空间呆了一段时间,忘记了用Java解决这个问题最简单的方法是什么。如果Java中已经内置了一些东西,每个JVM都可以做到这一点,那就太好了,如果没有,我愿意走单独的分配阶段路线 最终目标

假设您有一台机器,上面有多个配置不同的JVM。有没有一种方法可以从每个应用程序中获取GUID/UUID,并将其传递到在其上运行的应用程序中?不是JVM的实例,而是启动进程的特定JVM。我可以编写一个程序,查找机器上的所有JVM,并给它们一些元数据,以便在类加载器阶段(或其他阶段)将其拉入应用程序

我已经在.NET空间呆了一段时间,忘记了用Java解决这个问题最简单的方法是什么。如果Java中已经内置了一些东西,每个JVM都可以做到这一点,那就太好了,如果没有,我愿意走单独的分配阶段路线

最终目标是流经系统的每个事务都将有一个与之关联的主GUID。。。但我还想用完成这部分工作的JVM在“作业”中标记每一部分工作。想想每台机器上有多个JVM,也许以后。。。多台机器


注意:如果用户觉得我使用了错误的标签,请编辑它们。谢谢。

这里有一个解决您的用例的可能方法。我们可以使用-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");
请注意,这里您也可以使用自己的可读字符串作为JVM id,而不是UUID

如果要将属性文件与包含各种JVM属性的JVM关联;这是你可以做到的。假设属性文件的名称为MyProgram.properties

我们按如下方式启动JVM

java MyProgram -DPROPERTIES_FILE=MyProgram.properties
然后可以按如下方式加载属性文件。这是从以下内容中提取的:

main()
中完成上述操作后,您只需调用
System.getProperty(“propertyName”)即可访问Java程序中任何位置所需的任何属性


希望这有帮助。

这有帮助吗?每次您请求时,VMID路由都会更改。提到的服务器套接字方法也不是我想要的。但是解决类似问题的有价值的想法。有没有一种方法可以将.properties文件与JVM关联,而不是在其下运行的.jar?是否有一种约定可以在每次JVM启动时传递GUID?可以轻松地在40台其他机器上复制吗?
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);

}