Передача всего файла в аргументы JVM - PullRequest
6 голосов
/ 01 февраля 2011

У меня есть несколько систем, которым нужно загрузить одинаковые свойства в JVM.Я могу использовать флаг -D для загрузки одного свойства за раз, но я ищу что-то, что будет загружать все свойства во всем файле за один раз.Например:

Я мог бы просто один раз добавить --options-file = blah.properties ко всем jvms в моей сети, и с тех пор изменять только файл свойств, который может быть одним центральным файлом надсетевой ресурс.

Спасибо,

РЕДАКТИРОВАТЬ: любые аргументы или команды также должны работать в среде Windows.Поэтому любые bash или скриптовые хаки, специфичные для unix, не будут работать.

Ответы [ 4 ]

7 голосов
/ 01 февраля 2011

Примерно так мы это и делаем:

java $(tr '\n' ' ' < options_file) other args...

Здесь options_file содержит готовые -Dsomething или -Xsomething значения, по одному на строку.Команда tr просто заменяет каждую новую строку пробелом.

7 голосов
/ 01 февраля 2011

Я не думаю, что вы можете сделать это через командную строку (возможно, без некоторых взломов bash), но вы определенно можете сделать это программно:

Просто установите одно свойство -DmyPropertiesFile=/your/properties/file.properties и затем прочитайте этос одной из Properties.load() перегрузок.После этого System.setProperties(yourProps) должен делать то, что вы ожидаете.

Конечно, для этого требуется, чтобы вы могли перехватить этот код достаточно рано, чтобы ваши свойства были доступны по мере необходимости (например, если метод main()это твое, это прекрасно).

3 голосов
/ 01 февраля 2011

Некоторые опции:

  1. Оберните ваши свойства в файл .jar, а затем попросите процессы прочитать этот файл свойств из getClass().getResourceAsStream()
  2. Напишите командный файл для выполнения ваших процессов Java и либо явно перечислите опции -D, либо создайте командную строку динамически.

Я обычно решаю эту проблему с помощью Spring (используется и по другим причинам) и PropertyPlaceholderConfigurer . Это позволяет мне указать одно или несколько мест для файлов свойств и изменить конфигурацию Spring на месте.

0 голосов
/ 14 мая 2013

Если вы используете Ant для запуска процесса Java, ответ 9000 (плюс его комментарий Windows) сработает, и вы сможете настроить средство запуска на разницу в ОС.

Существует поток StackOverflow здесь , который описывает, как определить ОС из муравья

...