Доступ к свойствам / переменным среды без запуска Eclipse? - PullRequest
1 голос
/ 29 мая 2019

Я хочу установить путь к файлу конфигурации log4j / другие пути к папкам, которые можно использовать в других файлах классов, без жесткого указания пути к папке.

Правильно, я установил переменные как переменную окружения.Но это может быть изменено только если я запускаю Eclipse.Как мне установить эту переменную так, чтобы любой (не желающий запускать Eclipse) мог изменить ее извне.Также он будет использоваться в тестовых конфигурациях.Поэтому лучше не кодировать его жестко, а все пути к файлам и т. Д. Легко реорганизовать.

final static String log4jpath = System.getenv("LOG4J_PATH");

Ответы [ 3 ]

0 голосов
/ 30 мая 2019

Я добавил все пути к файлам и папкам в файле свойств (например, config.properties), а затем использовал его в методе testsetup с помощью InputStream input = new FileInputStream("Path to//config.properties"); Properties prop = new Properties(); prop.load(input); System.setProperty("log4j2.configurationFile", prop.getProperty("log4j.path"));

таким образом, все пути к файлам / папкам могут быть измененыизвне, и нет необходимости устанавливать переменную среды внутри проекта.

0 голосов
/ 30 мая 2019

Перефразируя комментарий :

[Как получить значение] вне Java-программы, например, в виде отдельного файла, который содержит все другие пути к файлам?

Это называется файл конфигурации .

Это часто файл свойств, похожий на файл конфигурации Log4j, но это может быть файл любого типа, например, XML, JSON, YAML, ...

Чтобы идентифицировать один такой файл, вы можете использовать:

  • Переменная окружения (как вы сейчас)
  • Системное свойство (более распространенное)
  • Файл с определенным именем в текущем каталоге
  • ...

Записи в этом файле идентифицируют все значения, которые вы действительно хотите.

Например, Spring, который представляет собой заполненный Java-фреймворк, будет искать конфигурацию значений во многих местах. Смотри 24. Внешняя конфигурация для полной информации, но вот краткий обзор наиболее распространенных:

    1. Аргументы командной строки, например, java -jar MyApp.jar --foo=bar
    1. Свойства системы Java, например, установить с помощью -Dfoo=bar в командной строке
    1. Переменные среды ОС, например, SET foo=bar (Windows) или export foo=bar (Linux)
    1. Свойства приложения вне вашего упакованного фляги, то есть относительно текущего каталога.
      Имя и местоположение могут быть переопределены в командной строке.
      • config/application.properties
      • config/application.yaml
      • application.properties
      • application.yaml
0 голосов
/ 29 мая 2019

Soni, если вы хотите поместить файл конфигурации log4j в одно место, чтобы каждый мог получить к нему доступ.Выполните шаги.

  1. Создайте проект с некоторым именем и в папке src / main / resources сохраните файл конфигурации log4j.
  2. Создайте файл jar, который должен содержать этот файл конфигурации log4j.
  3. Используйте этот созданный файл JAR, где это требуется.Log4j автоматически использует конфигурацию для желаемой регистрации.Если вы хотите, вы можете распространить этот jar-файл среди тех, кто хочет его использовать.

Приведенный выше вариант - если вы не хотите изменять файл конфигурации.

Теперь, еслиесть ситуация, когда кто-то хочет изменить файл конфигурации.В этом случае просто поместите конфигурацию в любой путь к классу проекта, значит, внутри папки ресурсов.Пока файлы jar log4j есть в пути к классам и файлам конфигурации.Он будет регистрировать все.

Однако, если вы хотите, вы можете расширить функциональность Log4j, передав конфигурацию как объект.Вы можете обратиться под ссылкой, чтобы получить программный доступ.

https://howtodoinjava.com/log4j/how-to-programmatically-configure-appenders-in-log4j/

...