本文目錄一覽:
- 1、java的持久化有什麼用?
- 2、JAVA的序列化和持久化的區別與聯繫
- 3、Java持久化對象時需要注意什麼?
- 4、用java代碼如何設置activemq消息持久化到資料庫中?
- 5、java消息隊列是怎麼實現數據持久化的
- 6、什麼是對象持久化,什麼對象序列化,如何實現java的對象序列化?
java的持久化有什麼用?
java持久化技術是為了將java對象與資料庫表對應。
java中存儲很多對象在內存是很浪費空間的,內存過於昂貴,與硬碟、磁帶、光碟等外存相比,內存的價格要高2~3個數量級,而且維持成本也高,至少需要一直供電吧。所以即使對象不需要永久保存,也會因為內存的容量限制不能一直呆在內存中,需要持久化來緩存到外存。
持久化是將程序數據在持久狀態和瞬時狀態間轉換的機制。通俗的講,就是瞬時數據(比如內存中的數據,是不能永久保存的)持久化為持久數據(比如持久化至資料庫中,能夠長久保存)。
JAVA的序列化和持久化的區別與聯繫
序列化可以將一個複雜的對象轉化為一維的數據,而這為持久化提供了很大的方便,因為文件就是一維的,將一維的東西寫入文件自然比較方便。
不過持久化是個很寬泛的概念,可以是寫入文件,也可以是存入資料庫,寫入註冊表等多種方式。其本意是延長對象或數據的生命周期,讓其可以超越程序的生命周期,程序關閉了,甚至伺服器關機了,下次運行程序時又可以讓對象或數據恢復到原來的狀態。
而序列化也不一定是用來持久化的,可以是用來傳遞使用,如從計算機A傳遞到計算機B;也可以用來進行深拷貝;總之序列化主要解決從複雜的數據結構轉化為一維結構,或者從一維結構從新構建複雜的數據結構。
Java持久化對象時需要注意什麼?
你問的這個問題範圍有點大,簡單寫幾條供你參考。
①資料庫的選擇,依據數據量大小、熟悉程度、成本等因素選定資料庫,一旦選擇並開發了,很難變更了。
②送擇合適的持久層開發框架,如ibatis、spring等,這些框架各有優缺點。
③具體實現時,則要注意注入漏洞,操作返回值讓用戶知道等。
用java代碼如何設置activemq消息持久化到資料庫中?
ActiveMQ持久化消息的二種方式;
1、持久化為文件
這個裝ActiveMQ時默認就是這種,只要設置消息為持久化就可以了。涉及到的配置和代碼有:
persistenceAdapter
kahaDB directory=”${activemq.base}/data/kahadb”/
/persistenceAdapter
producer.Send(request, MsgDeliveryMode.Persistent, level, TimeSpan.MinValue);
2、持久化為MySql
首先需要把MySql的驅動放到ActiveMQ的Lib目錄下,我用的文件名字是:mysql-connector-java-5.0.4-bin.jar
接下來修改配置文件
persistenceAdapter
jdbcPersistenceAdapter dataDirectory=”${activemq.base}/data” dataSource=”#derby-ds”/
/persistenceAdapter
在配置文件中的broker節點外增加
bean id=”derby-ds” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”
property name=”driverClassName” value=”com.mysql.jdbc.Driver”/
property name=”url” value=”jdbc:mysql://localhost/activemq?relaxAutoCommit=true”/
property name=”username” value=”activemq”/
property name=”password” value=”activemq”/
property name=”maxActive” value=”200″/
property name=”poolPreparedStatements” value=”true”/
/bean
從配置中可以看出資料庫的名稱是activemq,需要手動在MySql中增加這個庫。
然後重新啟動消息隊列,會發現多了3張表
1:activemq_acks
2:activemq_lock
3:activemq_msgs
java消息隊列是怎麼實現數據持久化的
java中的消息隊列消息隊列是線程間通訊的手段:import java.util.*public class MsgQueue{ private Vector queue = null; public MsgQueue(){ queue = new Vector(); } public synchronized void send(Object o) { queue.addElement(o); } public synchronized Object recv(){ if(queue.size()==0) return null; Object o = queue.firstElement(); queue.removeElementAt(0);//or queue[0] = null can also work return o;}}因為java中是locked by object的所以添加synchronized 就可以用於線程同步鎖定對象可以作為多線程處理多任務的存放task的隊列。他的client包括封裝好的task類以及thread類Java的多線程-線程間的通信2009-08-25 21:581. 線程的幾種狀態線程有四種狀態,任何一個線程肯定處於這四種狀態中的一種:1) 產生(New):線程對象已經產生,但尚未被啟動,所以無法執行。如通過new產生了一個線程對象後沒對它調用start()函數之前。2) 可執行(Runnable):每個支持多線程的系統都有一個排程器,排程器會從線程池中選擇一個線程並啟動它。當一個線程處於可執行狀態時,表示它可能正處於線程池中等待排排程器啟動它;也可能它已正在執行。如執行了一個線程對象的start()方法後,線程就處於可執行狀態,但顯而易見的是此時線程不一定正在執行中。3) 死亡(Dead):當一個線程正常結束,它便處於死亡狀態。如一個線程的run()函數執行完畢後線程就進入死亡狀態。4) 停滯(Blocked):當一個線程處於停滯狀態時,系統排程器就會忽略它,不對它進行排程。當處於停滯狀態的線程重新回到可執行狀態時,它有可能重新執行。如通過對一個線程調用wait()函數後,線程就進入停滯狀態,只有當兩次對該線程調用notify或notifyAll後它才能兩次回到可執行狀態。2. class Thread下的常用函數函數2.1 suspend()、resume()1) 通過suspend()函數,可使線程進入停滯狀態。通過suspend()使線程進入停滯狀態後,除非收到resume()消息,否則該線程不會變回可執行狀態。2) 當調用suspend()函數後,線程不會釋放它的「鎖標誌」。例11:class TestThreadMethod extends Thread{public static int shareVar = 0;public TestThreadMethod(String name){super(name);}public synchronized void run(){if(shareVar==0){for(int i=0; i5; i ){shareVar ;if(shareVar==5){this.suspend(); //(1)}}}else{System.out.print(Thread.currentThread()
什麼是對象持久化,什麼對象序列化,如何實現java的對象序列化?
持久化的對象,是已經存儲到資料庫或保存到本地硬碟中的對象,我們稱之為持久化對象。
為了保存在內存中的各種對象的狀態(也就是實例變數,不是方法),並且可以把保存的對象狀態再讀出來。雖然你可以用你自己的各種各樣的方法來保存object states,但是Java給你提供一種應該比你自己好的保存對象狀態的機制,那就是序列化。
簡單說就是對象序列化是將對象狀態轉換為可保持或傳輸的格式的過程。
什麼情況下需要序列化 :
a)當你想把的內存中的對象狀態保存到一個文件中或者資料庫中時候;
b)當你想用套接字在網路上傳送對象的時候;
c)當你想通過RMI傳輸對象的時候;
對象要實現序列化,是非常簡單的,只需要實現Serializable介面就可以了。
public class Test implements Serializable
對序列化的更多了解,可以上:
原創文章,作者:EBJX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/140424.html