假设你有一台机器上有多个JVM,配置不同。有没有办法从每个GUID / UUID传入其中运行的应用程序?不是JVM的实例,而是启动进程的特定JVM。我可以编写一个程序来搜索计算机上的所有JVM,并在ClassLoader阶段(或其他东西)为他们提供一些元数据以便进入应用程序。
我已经在.NET领域工作了一段时间,忘了在Java中解决这个问题的最简单方法。如果已经在Java中构建了可以为每个JVM做到这一点的东西,那么如果不是,我愿意去单独的分配阶段路径。
最终目标是流经系统的每一笔交易都会有一个与之相关的主要GUID ......但我还要在一份工作中标记每一部分工作"与JVM完成了这部分工作。考虑每台机器多个JVM,也许以后......多台机器。
注意:如果用户觉得我使用了错误的标签,请编辑它们。感谢。
答案 0 :(得分: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");
希望这有帮助。