如何从命令行查询运行java应用程序?

时间:2013-09-05 09:48:52

标签: java command-line command-line-interface

我在服务器上运行了一个正在运行的Java,Scala Web应用程序。如何创建用于访问/查询正在运行的应用程序的cli界面?在mininum我只需要调用正在运行的应用程序的方法并从命令行中检索它返回的字符串。我该怎么做?

注意:Apache Thrift似乎与我的问题有关,但感觉就像是一种矫枉过正。我想写一个bash脚本或一个小的java程序,它可以“挂钩”到已经运行的应用程序中。

2 个答案:

答案 0 :(得分:1)

您的程序可以使用attach API找到正在运行的JVM并连接到它。

http://docs.oracle.com/javase/7/docs/jdk/api/attach/spec/

然后您可以告诉它将代理加载到JVM中。看到 the java.lang.instrument package description, “VM启动后启动代理”一章,了解如何实现此类代理。

此代理可以在目标JVM中调用所需的方法。请注意,在处理另一个应用程序时,您可能想要执行的许多操作已经存在JMX代理。值得研究它。

答案 1 :(得分:1)

使用JMX

考虑到您的要求,最简单的解决方案最有可能使用 JMX 。这正是它所做的,因为它是Java Management eXtensions API。

您可以在tutorial trail中找到非常详细的Java Tutorial。它相对简单。您的Java程序将侦听来自JMX客户端的连接,并允许您查询自己的Management Beans(MBean)。

然后,管理员可以使用JMX兼容的客户端(例如jconsole)或自定义客户端。请点击此处查看custom JMX client example

另一个好处 - 虽然现在有些古老 - 教程是Getting Started with MBeans


如果您想要拦截特定函数的返回值,而不是为监视和管理创建自己的扩展点,那么您更可能想要使用调试器。

此外,您可能对这些SO问题感兴趣: