216
技術社區[雲棲]
PropertySet教程-3.JDBC方式
inkfish原創,請勿商業性質轉載,轉載請注明來源(https://blog.csdn.net/inkfish )。
PropertySet(來源:https://blog.csdn.net/inkfish) 是由opensymphony組織開發的的一個開源項目,但是那個項目文檔少,長時間沒有更新,官方文檔錯誤奇多,所以現在在項目中使用並不廣泛。但這並 不妨礙PropertySet成為一個優秀的key-value持久化模塊,當前,PropertySet可以說已經夠用。這裏我整理書寫了 PropertySet的文檔。(來源:https://blog.csdn.net/inkfish)
介紹完了memory、map、XML方式,該JDBC方式登場了。JDBC方式存儲,一定需要一個關係數據庫,這裏我用的是IBM DB2 v9.7。(來源:https://blog.csdn.net/inkfish)
1.建表SQL (來源:https://blog.csdn.net/inkfish)
create table OS_PROPERTYENTRY( GLOBAL_KEY varchar(255) not null, ITEM_KEY varchar(255) not null, ITEM_TYPE smallint, STRING_VALUE varchar(255), DATE_VALUE date, DATA_VALUE blob, FLOAT_VALUE float, NUMBER_VALUE numeric, primary key (GLOBAL_KEY, ITEM_KEY) );
下載下來的PropertySet包裏不包含建表SQL,需要自己照葫蘆畫瓢來寫,當然也有方便的方法,就是去下一個osworkflow,在src/etc/deployment/jdbc
目錄下有一堆數據庫的建表SQL,其中就包含了PropertySet的建表SQL。(來源:https://blog.csdn.net/inkfish)
2.配置文件 (來源:https://blog.csdn.net/inkfish)
propertyset.xml
放在classpath根路徑下,內容:(來源:https://blog.csdn.net/inkfish)
<?xml version="1.0" encoding="UTF-8"?> <propertysets> <propertyset name="jdbc" > <arg name="datasource" value="db2ds" /> <arg name="table.name" value="OS_PROPERTYENTRY" /> <arg name="col.globalKey" value="GLOBAL_KEY" /> <arg name="col.itemKey" value="ITEM_KEY" /> <arg name="col.itemType" value="ITEM_TYPE" /> <arg name="col.string" value="STRING_VALUE" /> <arg name="col.date" value="DATE_VALUE" /> <arg name="col.data" value="DATA_VALUE" /> <arg name="col.float" value="FLOAT_VALUE" /> <arg name="col.number" value="NUMBER_VALUE" /> </propertyset> </propertysets>
注:這個配置文件和propertyset默認的配置文件不同處在於僅有JDBC一段的配置,並且修改了JNDI名稱。由於示例中不使用web容器,僅僅偷用tomcat的jar包裏簡單的JNDI naming服務,所以JNDI名字取的是一個不帶“/”的字符串,如果帶“/”如“jdbc/db2ds”會報錯。(來源:https://blog.csdn.net/inkfish)
3.Jar包依賴 (來源:https://blog.csdn.net/inkfish)
需要的jar包除上一篇中的那些jar包,還需要:(來源:https://blog.csdn.net/inkfish)
1.數據庫JDBC驅動:db2jcc.jar、
db2jcc_license_cu.jar
2.tomcat裏的jar:catalina.jar
、tomcat-juli.jar
3.EJB的jar:ejb-api.jar
,帶EJB的jar是因為com.opensymphony.module.propertyset.JDBCPropertySet
中使用了com.opensymphony.util.EJBUtils
,EJBUtils
中某些需要被調用的方法使用了EJB的API。(來源:https://blog.csdn.net/inkfish)
4.Demo代碼 (來源:https://blog.csdn.net/inkfish)
import java.util.HashMap; import java.util.Map; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import org.apache.commons.lang.StringUtils; import com.ibm.db2.jcc.DB2DataSource; import com.opensymphony.module.propertyset.PropertySet; import com.opensymphony.module.propertyset.PropertySetManager; public class PropertySetDemo2 { public static void main(String[] args) throws Exception { PropertySetDemo2 demo = new PropertySetDemo2(); demo.initJNDI(); demo.jdbcPsDemo(); } public void initJNDI() throws NamingException { //生成一個DataSource實例 DB2DataSource ds = new DB2DataSource(); ds.setDriverType(4); ds.setServerName("127.0.0.1"); ds.setPortNumber(50000); ds.setDatabaseName("study"); ds.setUser("db2admin"); ds.setPassword("db2admin"); //注冊JNDI System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory"); //System.setProperty("java.naming.factory.url.pkgs", "org.apache.naming"); Context context = new InitialContext(); context.bind("db2ds", ds); } public void jdbcPsDemo() { System.out.println(StringUtils.center("JDBC PropertySet Demo", 80, '*')); Map<String, String> map = new HashMap<String, String>(); map.put("globalKey", "a");//不可缺省。不同項目或不同模塊可以用不同的globalKey,並且持久化到同一個表中 PropertySet ps = PropertySetManager.getInstance("jdbc", map); ps.setBoolean("BooleanPS", true); ps.setString("name", "Jack"); ps.setDouble("dvalue", 0.1234567); System.out.println(ps.getBoolean("BooleanPS")); System.out.println(ps.getString("name")); System.out.println(ps.getDouble("dvalue")); System.out.println(StringUtils.repeat("*", 80)); } }
5.典型實踐(來源:https://blog.csdn.net/inkfish)
在一個項目中,每個人分成不同的模塊,在測試機或者自己的本機各搭建了多個環境,每個環境有不同的參數,大家把配置信息存放到XML中,隨時可以打開修改。在最後集成測試時,把配置信息統一放到測試機的測試數據庫中進行統一管理。不同模塊使用不同globalKey以防衝突。(來源:https://blog.csdn.net/inkfish)
最後更新:2017-04-02 04:01:44