Системные свойства Java и переменные среды

Ответы:

149

Я думаю, что разница между двумя сводится к доступу. Системные переменные среды доступны любому процессу, а системные свойства Java доступны только процессу, к которому они добавлены.

Также, как сказал Богемский, переменные env устанавливаются в ОС (однако они «могут» быть установлены через Java), а системные свойства передаются как параметры командной строки или устанавливаются через setProperty().

Джейк Демпси
источник
5
Наконец, это то, как переменные добавляются и область видимости переменных.
Правин Срипати
Имейте в виду, что другие процессы могут найти cmd, используемый для запуска процесса, и, следовательно, свойства системы java.
Кристиан
359
  • Системные свойства устанавливаются в командной строке Java с использованием-Dpropertyname=valueсинтаксиса. Они также могут быть добавлены во время выполнения, используяSystem.setProperty(String key, String value)различные System.getProperties().load()методы.
    Чтобы получить конкретное системное свойство, вы можете использоватьSystem.getProperty(String key)илиSystem.getProperty(String key, String def).

  • Переменные среды устанавливаются в ОС, например, в Linuxexport HOME=/Users/myusernameили в Windows иSET WINDIR=C:\Windowsт. Д., И, в отличие от свойств, могут не устанавливаться во время выполнения.
    Чтобы получить конкретную переменную среды вы можете использоватьSystem.getenv(String name).

Богемский
источник
42
Абсолютно правильно, богемный. Переменные среды - это «вещь ОС», а свойства - «вещь Java». Так получилось, что Java решила представить переменные ОС в качестве свойств (так же, как Java выставляет текущий каталог и «другие вещи» в качестве свойств), но на самом деле это разные вещи.
paulsm4
@MarekSebera что так ты имеешь ввиду?
Богемный
8
System.grtProperties()перечисляет все свойства, и те, которые установлены из командной строки, будут там, но нет никакого способа отличить те от других свойств, добавленных системой, если это то, что вы спрашиваете.
Богемный
11
Обратите внимание, что вы также можете установить системные свойства с помощью переменной среды JAVA_TOOL_OPTIONS.
flacs
6
@KanagaveluSugumar Да, вам нужно перезапустить: настройки переменных среды считываются из среды при запуске. т.е. System.getenv(String name)не динамически считывает значение из системы во время вызова.
Богемный