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

时间:2010-12-17 10:52:48

标签: java jboss properties runtime

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

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

谢谢!

5 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您可以使用System.setProperty()方法执行此操作。 例如:System.setProperty(key,value);