記住安裝路徑可以通過設置環境變量(例如,MYAPP_HOME)來解決。 變量可以在安裝時用所需的值初始化,以便每次加載應用程序時都將設置該變量。 這是大多數項目中采用的典型解決方案。
其他解決方案
JDK提供的Preferences API可用于解決此典型問題。 首選項就像屬性一樣工作,但與屬性不同,它們是持久的。 在背面,當寫入首選項時,它將被存儲到后備存儲中。 當您要求首選項時,將從該存儲中加載該值。 在典型的Windows計算機上,默認存儲為Windows注冊表,但該存儲是可配置的,您可以將其更改為所需的文件,例如文件。
寫首選項很簡單。 與基于字符串的鍵/值對的屬性不同,首選項具有字符串的鍵,但是您可以存儲所有基本類型的值,例如long , boolean , double等。
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中,系統的其他用戶就無法訪問它,就像用戶變量一樣。 您可以清除通過調用clear() API編寫的首選項。
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));}
}
就像屬性一樣,檢索首選項也很簡單。 如果找不到該值,此處的get API會使用兩個參數:要找到的鍵和默認值。
Spring還提供了PreferencesPlaceholderConfigurer ,可用于加載首選項。
<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>
對于我們的安裝程序問題,我們可以在安裝時將所有配置選項存儲在“首選項”中,應用程序將只關心讀取這些值。 這樣,我們可以避免編寫環境變量的所有麻煩,并確保每次都加載正確的變量。
參考:在我們的JCG合作伙伴 Rahul Sharma的“到目前為止之路”博客 中 , 使用java.util.prefs.Preferences代替java.util.Properties 。
- 做短,但做對!
- 在Java 7中處理文件
- Java泛型快速教程
- Google Guava庫必需品
- Java最佳實踐–多線程環境中的DateFormat
翻譯自: https://www.javacodegeeks.com/2011/09/use-javautilprefspreferences-instead-of.html