2016-10-03 34 views
3

假设您有一台具有多个JVM的机器,并且具有不同的配置。有没有办法从每个GUID/UUID传递到它上面运行的应用程序?不是JVM的实例,而是启动进程的特定JVM。我可以编写一个程序来查找机器上的所有JVM,并在ClassLoader阶段(或其他)阶段为它们提供一些元数据,以便将它们引入应用程序。来自JVM的唯一ID用于跟踪目的

我在.NET空间中已经有一段时间了,忘记了在Java中解决这个问题最简单的方法。如果有一些已经内置到Java的东西可以为每个JVM做到这一点,如果没有,我愿意去分开的分配阶段路线。

最终目标是流经系统的每一笔交易都会有一个与之相关的主要GUID ......但是我也想用JVM来完成工作中的每一部分工作的工作。考虑每台机器上的多个JVM,或许以后......多台机器。

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

+1

这有帮助吗? http://stackoverflow.com/questions/8302634/how-to-obtain-unique-jvm-identifier –

+0

VMID路线在您每次需要时都会更改。上面提到的服务器套接字方法并不完全是我正在寻找的。但有价值的想法来解决类似的问题。 – BuddyJoe

+0

有没有办法将一个.properties文件与一个JVM关联,而不是运行在它下面的一个.jar?每次JVM启动时,是否有一个能够传递GUID的约定?这可以轻松地复制到其他40台机器上? – BuddyJoe

回答

1

以下是解决您的使用案例的一种可能方法。我们可以指定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"); 

请注意,您可以使用自己的可读字符串作为JVM ID,而不是UUID。

如果您想将属性文件与包含各种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程序中任何地方的任何财产。