问题
The question: Is there some way to "connect" to a running JVM and change system properties (given by -Dproperty=value) without stopping the JVM and without having programmed a way of doing it?
Now, the context: I have a JBoss server running on a remote machine, which is hosting my application, but also other applications. Those other apps may not be stopped. The server is invoked with a specific -D property that is relevant to my application only. This property was assigned the wrong value at server startup. I need to change that property. The easiest way would be to restart JBoss, but that would cause all apps to go down for some time. Is there a way of changing that property without stopping any applications but my own?
Thank you!
回答1:
Example found in one of my code:
System.setProperty("javax.net.ssl.trustStore", keystore_file);
You can run it in response for "reconfigure" query (add reconfigure() to your server code).
回答2:
Many system properties are only examined on start up so changing them doesn't always help.
I suggest you add support within your application to perform the change via a request so your application will know that it has happened and handle it accordingly.
回答3:
As others have already suggested, probably can't change the system property value used by your application. One option might be restarting your application. It seems that Jboss offers JMX enabled stop/start ability for web applications which you can read here though I haven't actually tried it out.
回答4:
Not a long-term solution, but you could connect a debugger and hot-swap some code that returns the property value you want instead of looking up the property. This requires that you enabled remote debugging when you started JBoss though.
回答5:
you can do it using System.setProperty() method. for example: System.setProperty(key, value);
来源:https://stackoverflow.com/questions/4469774/how-to-change-java-properties-at-runtime