找出Java应用程序使用的Java选项

时间:2011-11-16 18:15:19

标签: java parameters config options

有什么办法可以找出JVM中java应用程序正在使用的所有java选项(例如通过命令行传递的那些)?

我希望在应用程序从外部运行时即时找到它。

4 个答案:

答案 0 :(得分:1)

Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
    System.out.format("%s=%s%n", envName, env.get(envName));
}

答案 1 :(得分:0)

您可以使用JMX:

final JMXConnector connector = JMXConnectorFactory.connect(new JMXServiceURL(connectorAddress));
final MBeanServerConnection mBeanServerConnection = connector.getMBeanServerConnection();
final ObjectName commandLine = new ObjectName("java.lang:type=Runtime");
final List<Attribute> arguments = mBeanServerConnection.getAttributes(commandLine, new String[] {"InputArguments"}).asList();
String[] inputArguments = (String[]) arguments.get(0).getValue();
System.out.println(Arrays.asList(inputArguments));
connector.close();

要获得JMX连接,您可能会发现我对“JMX client accessible locally only”的回答很有帮助。

答案 2 :(得分:0)

使用JMX。它允许从应用程序内部和外部获取选项,属性等。

jmx

答案 3 :(得分:-1)

我认为Java不支持方法参数的“INTERCEPTING”,方法args不会在JVM中记录或截获。

但是,您可以使用此线程中其他答案中的System.env示例轻松打印发送到正在运行的类的args。

但是,如果您可以控制实际的应用程序源代码,可以按照此处的说明进行操作:How do I intercept a method invocation with standard java features (no AspectJ etc)?

这将允许您记录和拦截发送到main方法的args。