问题: 有没有办法“连接”到正在运行的JVM并更改系统属性(由-Dproperty = value给出)而不停止JVM并且没有编写方法来执行此操作?
现在,上下文: 我有一台运行在远程机器上的JBoss服务器,它托管我的应用程序,还有其他应用程序。其他应用程序可能无法停止。使用与我的应用程序相关的特定-D属性调用服务器。在服务器启动时为此属性分配了错误的值。我需要改变那个属性。最简单的方法是重启JBoss,但这会导致所有应用程序停机一段时间。有没有办法在不停止任何应用程序的情况下更改该属性,而不是我自己的?
谢谢!
答案 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);