Подтвердить что ты не робот

Как изменить свойства Java во время выполнения?

Вопрос: Есть ли способ "подключиться" к запущенной JVM и изменить системные свойства (заданные -Dproperty = значение), не останавливая JVM и не запрограммировав способ сделать это?

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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