閱讀857 返回首頁    go 阿裏雲 go 技術社區[雲棲]


PropertySet教程-2.Memory、map、XML方式

  inkfish原創,請勿商業性質轉載,轉載請注明來源(https://blog.csdn.net/inkfish )。

  PropertySet(來源:https://blog.csdn.net/inkfish) 是由opensymphony組織開發的的一個開源項目,但是那個項目文檔少,長時間沒有更新,官方文檔錯誤奇多,所以現在在項目中使用並不廣泛。但這並不妨礙PropertySet成為一個優秀的key-value持久化模塊,當前,PropertySet可以說已經夠用。這裏我整理書寫了PropertySet的文檔。(來源:https://blog.csdn.net/inkfish)


  PropertySet最容易使用和上手的是memory方式,最常用的是xml、JDBC,另外Hibernate、EJB是較常用的方式。這裏選擇介紹memory、map、XML方式。(來源:https://blog.csdn.net/inkfish)

 

1.Demo

PropertySetDemo.java

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.HashMap; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import com.opensymphony.module.propertyset.PropertySet; import com.opensymphony.module.propertyset.PropertySetManager; import com.opensymphony.module.propertyset.xml.XMLPropertySet; public class PropertySetDemo { public static void main(String[] args) throws Exception { PropertySetDemo demo = new PropertySetDemo(); demo.mapPsDemo(); demo.memoryPsDemo(); demo.xmlPsDemo(); } public void memoryPsDemo() { System.out.println(StringUtils.center("Memory PropertySet Demo", 80, '*')); //memory是配置文件中定義的:<propertyset name="memory" /> PropertySet ps = PropertySetManager.getInstance("memory", null); ps.setBoolean("BooleanPS", true); ps.setString("name", "Tom"); System.out.println(ps.getBoolean("BooleanPS")); System.out.println(ps.getString("name")); System.out.println(StringUtils.repeat("*", 80)); } public void mapPsDemo() { System.out.println(StringUtils.center("Map PropertySet Demo", 80, '*')); @SuppressWarnings("unchecked") HashMap map = new HashMap(); //memory是配置文件中定義的:<propertyset name="memory" /> PropertySet ps = PropertySetManager.getInstance("map", map); ps.setBoolean("BooleanPS", true); ps.setString("name", "Tom"); System.out.println(ps.getBoolean("BooleanPS")); System.out.println(ps.getString("name")); System.out.println(StringUtils.repeat("*", 80)); } public void xmlPsDemo() throws Exception { System.out.println(StringUtils.center("XML PropertySet Demo", 80, '*')); PropertySet ps = PropertySetManager.getInstance("xml", null); InputStream is = new FileInputStream("config.xml"); ((XMLPropertySet) ps).load(is); IOUtils.closeQuietly(is); System.out.println(ps.getBoolean("aa")); System.out.println(ps.getInt("ab")); System.out.println(ps.getLong("ac")); System.out.println(ps.getDouble("ad")); System.out.println(ps.getString("ae")); System.out.println(ps.getText("af").trim()); System.out.println(ps.getDate("ag")); System.out.println(ps.getProperties("ai")); ps.setBoolean("aa", false); ((XMLPropertySet) ps).save(new FileOutputStream("config.xml")); System.out.println(StringUtils.repeat("*", 80)); } }

 

config.xml (XML形式下使用):

<?xml version="1.0" ?> <property-set> <property key="aa" type="boolean">false</property> <property key="ab" type="int">123</property> <property key="ac" type="long">98765432109</property> <property key="ad" type="double">2.3</property> <property key="ae" type="string">abcde</property> <property key="af" type="text">fghijk</property> <property key="ag" type="date">2009-18-30 21:18:00</property> <property key="ai" type="properties"> <properties> <property key="passord" type="string">pwd</property> <property key="username" type="string">testuser</property> </properties> </property> </property-set>

 

需要jar包:(來源:https://blog.csdn.net/inkfish)

   1.propertyset-1.3.jar

   2.propertyset中自帶的第三方jar包:oscore-2.2.1.jarcommons-logging-1.1.1.jar

   3.xml形式時需要使用的解析的包:xalan.jar

   4.其他demo程序用到的工具包:commons-lang-2.4.jarcommons-io-1.4.jar

 

2.memory方式 (來源:https://blog.csdn.net/inkfish)

  memory顧名思義,把數據存到內存裏,剛開始內存裏沒有東西,程序退出也不會保存,適合於做demo性質的小項目。初始化使用簡單的“PropertySet ps = PropertySetManager.getInstance("memory", null); ”即可,然後就可以set和get,注意剛實例化裏麵什麼數據都沒有,get不出來東西。(來源:https://blog.csdn.net/inkfish)

 

3.map方式 (來源:https://blog.csdn.net/inkfish)

  map和memory類似,也是使用內存存取數據,區別是map開始需要初始化一個map作為初始參數傳入,初始化代碼:(來源:https://blog.csdn.net/inkfish)

HashMap map = new HashMap(); PropertySet ps = PropertySetManager.getInstance("map", map);

  初始化過程的具體實現類是com.opensymphony.module.propertyset.map.MapPropertySet ,初始化過程:(來源:https://blog.csdn.net/inkfish)

public void init(Map config, Map args){ map = (Map)args.get("map"); if(map == null) map = new HashMap(); }

  可以看出PropertySetManager.getInstance("map", map); 傳入的map裏可以嵌套一個key為"map",值為map類型的Map ,如果傳入的map是一個空的Map ,則初始化出一個HashMap 的示例,但千萬不能傳入null。初始化完畢後,就可以隨便使用。(來源:https://blog.csdn.net/inkfish)

 

4.XML方式 (來源:https://blog.csdn.net/inkfish)

  XML方式的初始化,一定是需要一個XML屬性文件,屬性文件的格式見上麵的config.xml ,裏麵支持的類型有booleanintlongdoubleStringtextDatePropertiesxml 、Object。xml和Object現在還沒研究透,實驗也沒完全成功,放一邊不說。Date類型的數據格式是yyyy-MM-dd HH:mm:ss ,寫死在PropertySet裏的。String和text幾乎一樣,都按照String處理,但是如果調用了save() 方法,text前後可能會加一些回車或空格,因此不建議使用text,如果需要使用,則在getText() 後需要trim() 一下。(來源:https://blog.csdn.net/inkfish)

最後更新:2017-04-02 04:01:44

  上一篇:go PropertySet教程-3.JDBC方式
  下一篇:go [原創](2010.02.07更新)忙裏偷閑中寫的一個係統物理/虛擬內存查看器。