记住安装路径可以通过设置环境变量(例如,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