如何在运行时更改Java属性?

问题:是否有某种方法可以“连接”到正在运行的JVM并更改系统属性(由-Dproperty = value给出)而无需停止JVM并且没有编写方法来执行此操作?

现在,上下文:我有一台运行在远程机器上的JBoss服务器,它托管我的应用程序,还有其他应用程序。 其他应用程序可能无法停止。 使用与我的应用程序相关的特定-D属性调用服务器。 在服务器启动时为此属性分配了错误的值。 我需要改变那个属性。 最简单的方法是重启JBoss,但这会导致所有应用程序停机一段时间。 有没有办法改变这个属性而不停止任何应用程序,但我自己的?

谢谢!

在我的一个代码中找到的示例:

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

您可以运行它来响应“重新配置”查询(将reconfigure()添加到您的服务器代码中)。

许多系统属性仅在启动时进行检查,因此更改它们并不总是有用。

我建议您在应用程序中添加支持以通过请求执行更改,以便您的应用程序知道它已经发生并相应地处理它。

正如其他人已经建议的那样,可能无法更改应用程序使用的系统属性值。 一种选择可能是重新启动您的应用程序。 似乎Jboss为Web应用程序提供了JMX启用的停止/启动function, 你可以在这里阅读,虽然我还没有尝试过。

这不是一个长期解决方案,但您可以连接调试器并热交换一些返回所需属性值的代码,而不是查找属性。 这要求您在启动JBoss时启用远程调试。

你可以使用System.setProperty()方法来做到这一点。 例如:System.setProperty(key,value);