使用java.util.prefs.Preferences代替java.util.Properties

典型的应用程序安装程序需要向用户询问几个选项,其中一些是配置问题,例如,应用程序应在其上运行的端口,应如何运行等。应用程序必须记住这些选项,并在每个选项中使用它们。跑。 解决此问题的标准方法是将这些选项写入属性文件,该文件可以在应用程序启动时加载。 但是随后问题又转移到其他地方,即记住安装路径,然后从安装路径加载所需的属性文件。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F1笔记(八)时钟

STM32有五种时钟源 1、HSI。高速内部时钟&#xff0c;RC振荡器&#xff0c;频率为8MHz。 2、HSE。高速外部时钟&#xff0c;可接石英/陶瓷谐振器&#xff0c;或者借外部时钟源&#xff0c;频率范围为4MHz~16MHz。 3、PLL。锁相环倍频输出&#xff0c;其时钟输入源可选择为HS…

java常用工具类(一)

一、String工具类 package com.mkyong.common; import java.util.ArrayList; import java.util.List; /** * * String工具类. <br> * * author 宋立君 * date 2014年06月24日 */ public class StringUtil { private static final int INDEX_NO…

Oracle定时器调用存储过程

关于Oracle定时器调用存储过程的一点总结&#xff0c;如果有不足的地方&#xff0c;希望大家多多指导&#xff0c;也是第一次在博客上写东西&#xff0c;以前也只是自己总结之后放在硬盘了&#xff0c;后来同事告诉自己&#xff0c;其实写博客可以获得很多&#xff0c;不管是知…

python可以下载百度文库_不用下载券也能下载百度文库资料,Python帮你轻松搞定...

大家可能平时都有在百度文库下载文档的经历&#xff0c;费尽心思好不容易在文库找了一份可以用的资料&#xff0c;一看需要用下载券下载&#xff0c;搞的人很烦。 有的人为了节省时间&#xff0c;就任性办理了个文库VIP&#xff0c;再也不用纠结怎么下文档了。如果你是一个百度…

将对象映射到多个XML模式–天气示例

我已经在EclipseLink JAXB&#xff08;MOXy&#xff09;的XmlPath和外部绑定文件扩展中撰写了以前的文章。 在本文中&#xff0c;我将通过将单个对象模型映射到两个不同的XML模式来演示这些扩展的功能。 为了使示例更加“真实”&#xff0c;XML数据将来自提供天气信息的两种不同…

STM32F1笔记(九)通用定时器

STM32F1的定时器分为TIME1/8等高级定时器&#xff0c;TIME2~5等通用定时器&#xff0c;TIME6/7基本定时器。三者的区别主要参考《STM32中文参考手册》里特性的每种定时器主要特性的异同。 先看中文手册中通用定时器的简介&#xff1a; 通用定时器的寄存器有一个比较有趣的地方…

佳能MP258的5200错误和P08代码解决方法及清零方法

参考文章转载于:https://www.cnblogs.com/arcer/p/5659624.html

tomcat通过conf-Catalina-localhost目录发布项目详解

转自&#xff1a;http://www.cnblogs.com/iyangyuan/p/3316444.html&#xff0c;感谢 杨元。 Tomcat发布项目的方式大致有三种&#xff0c;但小菜认为通过在tomcat的conf/Catalina/localhost目录下添加配置文件&#xff0c;来发布项目&#xff0c;是最佳选择。 因为这样对tomca…

c++保存图标到dll_自动保存邮件附件至指定文件夹

最近有个需求&#xff0c;ERP系统会自动发很多csv附件到我邮箱&#xff0c;我需要把这些附件上传到FTP服务器&#xff0c;服务器会把这些csv的数据写到另外一个系统的数据库。每次大概有30个邮件&#xff0c;每个邮件有一个附件&#xff0c;而且附件的名字都一样&#xff0c;是…

有时在Java中,一个布局管理器是不够的

在开发Java Swing应用程序时&#xff0c;最经常的是&#xff0c;我们需要在多个嵌套面板中使用多个布局管理器。 通常这不是问题&#xff0c;并且被认为是几乎所有人类已知语言的所有UI开发的常规做法。 但是&#xff0c;大多数情况下&#xff0c;对于UI中的每个面板&#xff0…

VM克隆之后启动eth0找不到eth0:unknown interface:no such device

问题出现&#xff1a;VMware 克隆之后&#xff0c;ifconfig命令执行找不到eth0,报错 eth0:unknown interface:no such device 是因为/etc/sysconf/network-scripts/ifcfg-eth0配置复制过来和虚拟主机的网卡Mac等信息不匹配 解决方法&#xff1b; 删除/etc/udev/rules.d/70-pers…

“精彩极了”和“糟糕透了”

虽然已经是25岁&#xff0c;但是对小学的一篇课文依然记忆尤新&#xff0c;《“精彩极了”和“糟糕透了”》。 课文正文 记得七八岁的时候&#xff0c;我写了第一首诗。母亲一念完那首诗&#xff0c;眼睛亮亮的&#xff0c;兴奋地嚷着&#xff1a;“巴迪&#xff0c;真是你写的…

python中print的用法_Python中print函数简单使用总结

Python中print函数简单使用总结 print函数是Python的入门&#xff0c;每一个学习python的人都绕不开这个函数&#xff0c;下面介绍一下这个函数的用法。 打开电脑&#xff0c;选择python软件&#xff0c;下面选择python 3.7为例进行介绍&#xff0c;点击python 3.7&#xff0c;…

STM32F1笔记(十)PWM

PWM&#xff1a;Pulse Width Modulation&#xff0c;脉冲宽度调制。是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单来说就是对脉冲宽度的控制。 在《STM32中文参考手册》里可以看到 占空比&#xff1a;占空比是指在一个脉冲循环内&#xff0c;通电时…

从GlassFish 3.x扩展到WebLogic 12c Server

Oracle针对GlassFish服务器的策略的主要目标之一是“与Fusion Middleware and Products集成”&#xff08;来源&#xff1a; Community Roadmap&#xff0c;2010年5月 &#xff09;。 在今年早些时候&#xff0c;您听到了很多关于两台服务器合而为一的恐惧和谣言。 看到这两种产…

移动互联网时代:如何让女孩爱上你在一分钟内?

部分《移动互联网时代&#xff1a;让女孩爱上你在一分钟内》其实我只是做原来的盲目思想有移动互联网的自主知识产权&#xff0c;他没有详细说明如何真正让女孩爱上你在一分钟内&#xff1f;在真实生活中&#xff0c;预期也没有那么简单&#xff0c;易于&#xff0c;毕竟&#…

hashset去重原理_基于simhash的文本去重原理

互联网网页存在着大量重复内容&#xff0c;必须有一套高效的去重算法&#xff0c;否则爬虫将做非常多的无用功&#xff0c;工作时效性无法得到保证&#xff0c;更重要的是用户体验也不好。业界关于文本指纹去重的算法众多&#xff0c;如 k-shingle 算法、google 提出的simhash …

解决express video 手机无法播放的问题

http://stackoverflow.com/questions/24976123/streaming-a-video-file-to-an-html5-video-player-with-node-js-so-that-the-video-c 项目地址 https://github.com/shenggen1987/mp4-demo express index.jade extends layoutblock contenth1 titlep Welcome to #{title}vid…

STM32F1笔记(十一)ADC

查看《STM32中文参考手册》里ADC的介绍和特性 STM32的ADC最大转换速率为1Mhz&#xff0c;即1us&#xff0c;在ADCCLK14M&#xff0c;采样周期为1.5个ADC时钟下得到。当ADC的时钟超过14M时&#xff0c;将导致结果准确度下降。 规则通道相当于正常运行的程序。注入通道就相当于中…

使用JPA和Spring 3.1进行事务配置

1.概述 本教程将讨论配置Spring Transactions &#xff0c;使用Transactional批注和常见陷阱的正确方法 。 要更深入地讨论核心持久性配置&#xff0c;请查看Spring with JPA教程 。 有两种不同的配置事务的方法– 批注和AOP –每种都有自己的优势–我们将在这里讨论更常见的…