How to change Java properties at runtime?
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 o开发者_JS百科ther 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!
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).
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.
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.
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.
you can do it using System.setProperty() method. for example: System.setProperty(key, value);
精彩评论