Статьи

Используйте java.util.prefs.Preferences вместо java.util.Properties

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

Запоминание установленного пути может быть решено путем установки переменной окружения, например, MYAPP_HOME. При установке переменная может быть инициализирована с требуемым значением, так что при каждой загрузке приложения будет устанавливаться переменная. Это типичное решение, которое используется в большинстве проектов.

Другое решение

API предпочтений , предоставляемый JDK, можно использовать для решения этой типичной проблемы. Настройки работают так же, как свойства, но они постоянны в отличие от свойств. С другой стороны, когда записывается предпочтение, оно сохраняется в резервном хранилище. Когда вы запрашиваете предпочтение, значение загружается из этого хранилища. На типичной машине с Windows хранилищем по умолчанию является реестр Windows, но хранилище можно настроить, и вы можете изменить его на любое, например, файл.

Написание предпочтений прямо вперед. В отличие от свойств, которые представляют собой пары ключ-значение на основе строк, в настройках есть ключи, которые являются строками, но вы можете хранить значения всех основных типов, например long , boolean , double и т. Д.

01
02
03
04
05
06
07
08
09
10
11
public class StaticPreferenceFactory {
    public static void main(String args[]) throws Exception {
        Preferences prefsRoot = Preferences.userRoot();
        Preferences myPrefs = prefsRoot
                .node("com.myapp.preference.staticPreferenceLoader");
        myPrefs.put("fruit", "apple");
        myPrefs.putDouble("price", 40);
        myPrefs.putBoolean("available", false);
        return prefsRoot;
    }
}

Также как у нас есть системные переменные и пользовательские переменные. Есть узел системных настроек, который вы можете получить, вызвав systemRoot (), и есть узел пользовательских настроек, который вы получите, вызвав узел userRoot () . Как только предпочтение сохраняется в userNode, оно становится недоступным для других пользователей системы, так же как и пользовательские переменные. Вы можете очистить написанные настройки, вызвав API clear () .

01
02
03
04
05
06
07
08
09
10
public class UsePreference {
    public static void main(String args[]) throws Exception {
        Preferences myfilePrefs = Preferences.userRoot();
        myfilePrefs = myfilePrefs
                .node("com.myapp.preference.staticPreferenceLoader");
        System.out.println("finding fruit:"
                + myfilePrefs.get("fruit", "not found") + " available :"
                + myfilePrefs.getBoolean("available", true));
    }
}

Получение предпочтения также просто, как свойства. API get здесь принимает два аргумента: ключ, который должен быть найден, и значение по умолчанию, если значение не найдено.

Spring также предоставляет PreferencesPlaceholderConfigurer, который можно использовать для загрузки настроек.

1
2
3
4
5
6
7
<bean id="preferencePlaceHolder"
    class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
    <property name="userTreePath" value="com.myapp.preference.staticPreferenceLoader" />
</bean>
<bean id="myEntity" class="info.dependencyInjection.spring.factory.MyEntity">
    <property name="value" value="${fruit}" />
</bean>

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

Ссылка: используйте java.util.prefs.Preferences вместо java.util.Properties от нашего партнера JCG Рахула Шарма в блоге «Дорога до сих пор …» .

Статьи по Теме :