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