Как ссылаться на системное свойство в определяемом пользователем файле .properties? - PullRequest
8 голосов
/ 17 сентября 2010

Я хочу определить свойство для рабочего каталога (скажем, work.dir=/home/username/working-directory), для моего рабочего файла .properties без жесткого кодирования /home/username.

Я хочу сослаться на системное свойство user.home на жестком коде /home/username, чтобы сделать work.dir более общим.

Как я могу ссылаться на системное свойство и объединять его с другими пользовательскими строками в пользовательских .properties?

Примечание: Я не хочу получать доступ к свойству user.home в моем коде java, но из .properties, которые я определил.Я хочу иметь возможность заменить значение work.dir другим значением как для производства, так и для разработки (например, тесты JUnit).

Ответы [ 3 ]

4 голосов
/ 17 сентября 2010

Получить свойство из файла, затем заменить поддерживаемые макросы.

String propertyValue = System.getProperty("work.dir");
String userHome = System.getProperty("user.home" );
String evaluatedPropertyValue = propertyValue.replace("$user.home", userHome );
3 голосов
/ 01 марта 2013

Вы можете управлять своими свойствами с помощью Общая конфигурация и использовать Переменная интерполяция

Если вы знакомы с Ant или Maven, вы наверняка уже сталкивались с переменными (такими как ${token}), которые автоматически раскрываются при загрузке файла конфигурации. Конфигурация Commons также поддерживает эту функцию [...]

Это позволило бы файл .properties с

work.dir=${user.home}/working-directory
0 голосов
/ 27 января 2013

Эта функция недоступна в java.util.Properties.Но многие библиотеки добавляют переменную подстановку к свойствам.

Вот пример того, что вы пытаетесь сделать с помощью библиотеки OWNER API (см. Пункт «Импорт свойств»):

public interface SystemPropertiesExample extends Config {
    @DefaultValue("Welcome: ${user.name}")
    String welcomeString();

    @DefaultValue("${TMPDIR}/tempFile.tmp")
    File tempFile();
}

SystemPropertiesExample conf =
        ConfigFactory.create(SystemPropertiesExample.class, System.getProperties(), System.getenv());
String welcome = conf.welcomeString();
File temp = conf.tempFile();
...