Любой возможный способ указать имя работающей java виртуальной машины? - PullRequest
0 голосов
/ 02 апреля 2020

Для каких-то специальных целей мне нужно использовать ManagementFactory.getRuntimeMXBean().getName, чтобы выполнить какое-то специальное «утверждение if», скажем, если возвращаемое значение String этого метода содержит «Master» или «Slave».

Можно ли указать это значение при запуске приложения java?

1 Ответ

1 голос
/ 02 апреля 2020

В моей системе windows имя содержит PID и имя хоста моего ноутбука (например, "14576@DESKTOP-LEOJCPM"). Если вы хотите положиться на имя хоста операционной системы, это должно работать. Но каждая JVM может вести себя по-разному.

См. Api docs: "Возвращает имя, представляющее работающую виртуальную машину Java. Возвращенная строка имени может быть любой произвольной строкой, и реализация виртуальной машины Java может выбрать вставьте указанную платформу c полезную информацию в возвращаемую строку имени. У каждой работающей виртуальной машины может быть свое имя. "

Ref: https://docs.oracle.com/javase/8/docs/api/java/lang/management/RuntimeMXBean.html#getName -

Реализация в Sun VM Метода приводит к объединению pid и имени хоста:

public String getVmId() {
    int pid = getProcessId();
    String hostname = "localhost";
    try {
        hostname = InetAddress.getLocalHost().getHostName();
    } catch (UnknownHostException e) {
        // ignore
    }
    return pid + "@" + hostname;
}

Так что невозможно изменить его напрямую, без изменения классов и, следовательно, поведения VM. Этот метод используется и в других местах. Лучший совет - полагаться на дополнительное системное свойство или конфигурацию, зависящую от хоста.

См .: http://www.docjar.com/html/api/sun/management/VMManagementImpl.java.html

...