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.jar
、commons-logging-1.1.1.jar
3.xml形式時需要使用的解析的包:xalan.jar
4.其他demo程序用到的工具包:commons-lang-2.4.jar
、commons-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
,裏麵支持的類型有boolean
、int
、long
、double
、String
、text
、Date
、Properties
、xml
、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