java - 来自 JVM 的用于跟踪目的的唯一 ID

标签 java transactions jvm

假设您有一台机器,上面有多个配置不同的 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/

相关文章:

java - 如何实现加密的共享偏好设置

java - hibernate envers 是否意味着一次处理一项事务?

java - JVM 堆已用百分比 - 何时生成警报

scala - 如何指示 gradle 的 scala 插件在已安装的 JVM 中选择特定的 JVM?

multithreading - 为什么应用程序会在一个Solaris框中创建31个 “GC task thread”而在另一个Solaris框中仅创建2个

Java:如何使用麦克风输入作为JavaFX媒体播放器的输入?

java - 为什么 jfrog maven artifactory 插件在验证阶段被调用?

java - Axis2 客户端抛出 AxisFault : Must Understand check failed for header Security

c# - 为什么我的 TransactionScope 在测试期间没有得到尊重?

php - 在不使用 cas 的情况下在 Memcached 中实现原子计数器