Как изменить свойства Java во время выполнения? - PullRequest
16 голосов
/ 17 декабря 2010

Вопрос: есть ли какой-нибудь способ «подключиться» к работающей JVM и изменить системные свойства (заданные -Dproperty = value), не останавливая JVM и не запрограммировав способ сделать это?Теперь контекст: у меня есть сервер JBoss, работающий на удаленной машине, на которой размещается мое приложение, но также и другие приложения.Эти другие приложения не могут быть остановлены.Сервер вызывается с определенным свойством -D, которое относится только к моему приложению.Этому свойству было присвоено неправильное значение при запуске сервера.Мне нужно изменить это свойство.Самый простой способ - перезапустить JBoss, но это приведет к тому, что все приложения на некоторое время закроются.Есть ли способ изменить это свойство без остановки каких-либо приложений, кроме моего собственного?

Спасибо!

Ответы [ 5 ]

4 голосов
/ 17 декабря 2010

Пример найден в одном из моих кодов:

System.setProperty("javax.net.ssl.trustStore", keystore_file); 

Вы можете запустить его в ответ на запрос «переконфигурировать» (добавьте reconfigure() к коду вашего сервера).

3 голосов
/ 17 декабря 2010

Многие системные свойства проверяются только при запуске, поэтому их изменение не всегда помогает.

Я предлагаю вам добавить поддержку в вашем приложении, чтобы выполнить изменение по запросу, чтобы ваше приложение знало, что это произошло, и обработало его соответствующим образом.

1 голос
/ 17 декабря 2010

Не долгосрочное решение, но вы можете подключить отладчик и выполнить горячую замену некоторого кода, который возвращает желаемое значение свойства вместо поиска свойства. Это требует, чтобы вы включили удаленную отладку при запуске JBoss.

1 голос
/ 17 декабря 2010

Как уже говорили другие, возможно, не удастся изменить значение системного свойства, используемого вашим приложением.Одним из вариантов может быть перезапуск приложения.Похоже, что Jboss предлагает JMX возможность остановки / запуска для веб-приложений, которые вы можете прочитать здесь , хотя я на самом деле не пробовал.

0 голосов
/ 17 декабря 2010

вы можете сделать это с помощью метода System.setProperty ().например: System.setProperty (ключ, значение);

...