Поиск параметров Java, используемых приложением Java - PullRequest
0 голосов
/ 16 ноября 2011

Есть ли способ узнать, какие все java-опции используются java-приложением внутри JVM (например, те, которые передаются через командную строку)?

Я хочу найти его на лету, когдаприложение работает снаружи.

Ответы [ 4 ]

1 голос
/ 16 ноября 2011
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
    System.out.format("%s=%s%n", envName, env.get(envName));
}
0 голосов
/ 16 ноября 2011

Используйте JMX. Позволяет получать параметры, свойства и т. Д. Как изнутри, так и снаружи приложения.

jmx

0 голосов
/ 16 ноября 2011

Вы можете использовать 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, доступный только локально * ".

0 голосов
/ 16 ноября 2011

Я считаю, что Java не поддерживает «перехват» аргументов метода, аргументы метода не регистрируются и не перехватываются в JVM.

Однако вы легко можете распечатать аргументы, отправленные в работающий класс, используя пример System.env в другом ответе в этой теме.

ОДНАКО, если у вас есть контроль над исходным кодом реального приложения, вы можете следовать указаниям здесь: Как перехватить вызов метода стандартными функциями Java (без AspectJ и т. Д.)?

Это позволит вам регистрировать и перехватывать аргументы, отправляемые методу main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...