Запоминание установленного пути может быть решено путем установки переменной окружения, например, 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 Рахула Шарма в блоге «Дорога до сих пор …» .