16 Stimmen

Wie kann man Java-Eigenschaften zur Laufzeit ändern?

Die Frage: Gibt es eine Möglichkeit, sich mit einer laufenden JVM zu "verbinden" und Systemeigenschaften (die durch -Dproperty=value angegeben werden) zu ändern, ohne die JVM zu stoppen und ohne einen Weg programmiert zu haben, dies zu tun?

Nun zum Kontext: Ich habe einen JBoss-Server, der auf einem entfernten Rechner läuft, auf dem meine Anwendung, aber auch andere Anwendungen laufen. Diese anderen Anwendungen dürfen nicht gestoppt werden. Der Server wird mit einer bestimmten -D-Eigenschaft aufgerufen, die nur für meine Anwendung relevant ist. Dieser Eigenschaft wurde beim Start des Servers der falsche Wert zugewiesen. Ich muss diese Eigenschaft ändern. Am einfachsten wäre es, JBoss neu zu starten, aber das würde dazu führen, dass alle Anwendungen für einige Zeit ausfallen. Gibt es eine Möglichkeit, diese Eigenschaft zu ändern, ohne alle Anwendungen außer meiner eigenen zu stoppen?

Ich danke Ihnen!

5voto

Michał Niklas Punkte 50723

Beispiel in einem meiner Codes gefunden:

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

Sie können es als Antwort auf die Abfrage "Neu konfigurieren" ausführen (hinzufügen reconfigure() zu Ihrem Server-Code).

4voto

Peter Lawrey Punkte 511323

Viele Systemeigenschaften werden nur beim Start überprüft, so dass eine Änderung dieser Eigenschaften nicht immer hilfreich ist.

Ich schlage vor, dass Sie in Ihrer Anwendung eine Unterstützung für die Durchführung der Änderung über eine Anfrage hinzufügen, damit Ihre Anwendung weiß, dass dies geschehen ist, und es entsprechend behandelt.

1voto

Sanjay T. Sharma Punkte 22330

Wie bereits von anderen vorgeschlagen, können Sie den von Ihrer Anwendung verwendeten Wert der Systemeigenschaft wahrscheinlich nicht ändern. Eine Möglichkeit wäre, die Anwendung neu zu starten. Es scheint, dass Jboss eine JMX-fähige Stopp/Start-Funktion für Webanwendungen bietet, die können Sie hier lesen obwohl ich es noch nicht ausprobiert habe.

1voto

OrangeDog Punkte 33207

Das ist keine langfristige Lösung, aber Sie könnten einen Debugger anschließen und im laufenden Betrieb etwas Code austauschen, der den gewünschten Eigenschaftswert zurückgibt, anstatt die Eigenschaft nachzuschlagen. Dies setzt allerdings voraus, dass Sie beim Start von JBoss das Remote-Debugging aktiviert haben.

0voto

GuruKulki Punkte 25088

Können Sie dies mit der Methode System.setProperty() tun. zum Beispiel: System.setProperty(Schlüssel, Wert);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X