要求資料庫中斷的情況下,部分功能能力放通:
實現思路:本想用csv檔案儲存臨時資料,發現用陣列拼裝太麻煩,後直接採用物件序列化儲存
採用讀寫所運算元據,在業務操作時,捕捉資料庫中斷異常,把物件寫入快取檔案中,
資料庫正常後,任意乙個使用者登陸,開闢乙個執行緒進行讀操作,寫入資料庫,然後刪除快取檔案
過程中發現學序列化追加儲存,無法正常讀取,最後乙個工具類是處理該問題的
/**
* * 快取檔案讀取
* 《讀取快取檔案,對快取資料進行資料庫持久化操作》
* * @author ***
* @version [v01, 2011-9-6]
* @see [相關類/方法]
* @since [產品/模組版本]
*/@scope("prototype")
@component
public class readtask extends thread
catch (exception e)
//4、刪除檔案
readwritelockoperator.delete();
if (null == eventbeanlist || eventbeanlist.isempty())
//3、成功儲存到資料庫(如果出現異常,如果普通異常記錄失敗行數,如果是資料庫中斷,回滾)
listfailist = eventrepository.inserteventlink(eventbeanlist);
if (null == failist || failist.isempty())
//5、對於資料庫突然中斷的資料,覆寫回快取檔案
trycatch (exception e)}}
}
/**
* 檔案讀寫操作類
* 《針對檔案的續寫加入讀寫鎖,避免衝突》
* * @author ***
* @version [v1.0, 2011-9-6]
* @see [相關類/方法]
* @since [ecc/c02]
*/@component
public class readwritelocklogic
try}
}catch (exception e)
finally
catch (ioexception e)
}if (null != ois)
catch (ioexception e)
}readlock.unlock();//一定要保證鎖的釋放
}return eventbeanlist;
}/**
* 寫檔案
* * @param eventbeanlist 事件物件
* @param isverride 是否覆蓋
* @return boolean 是否正確寫入
*/public boolean write(listeventbeanlist, boolean isverride)
// throws exception
}catch (exception e)
}if (!file.exists() && null != eventbeanlist)
}catch (exception e)
}fos = new fileoutputstream(file, isverride);
outsteam = eccobjectoutputstream.newinstance(file, fos);
if (null != eventbeanlist)
}outsteam.flush();
}catch (exception e)
finally
catch (ioexception e)
}if (null != outsteam)
catch (ioexception e)
}writelock.unlock();//一定要保證鎖的釋放
}return true;
}/**
* 刪除檔案
* 如果檔案存在則刪除檔案
* * @return boolean
*/public boolean delete()
catch (exception e)
}return false;
}/**
* 判斷檔案是否存在
* * @return boolean
*/public boolean i***ist()
public string getpath()
public void setpath(string path)
}
/**
* 快取檔案寫入
* 事件bean加密轉換為陣列寫入快取檔案中
* * @author ***
* @version [版本號, 2011-9-7]
* @see [相關類/方法]
* @since [產品/模組版本]
*/@component
public class writetask
else
return response;
}}
/**
* * 針對輸出流的封裝類
* 解決序列化物件追加寫入檔案無法讀取問題
* @author ***
* @version [版本號, 2011-9-9]
* @see [相關類/方法]
* @since [產品/模組版本]
*/public class eccobjectoutputstream extends objectoutputstream
/***
*/@override
protected void writestreamheader()
throws ioexception
else
}/**
* 《預設建構函式》
*///public eccobjectoutputstream(outputstream out, file f) //修改pmd問題
public eccobjectoutputstream(outputstream out)
throws ioexception
}
資料庫設計 能力等級
乙個威客系統,要針對雇主與服務商設計能力等級,具體計算等級方式如下 總的來說就是按照公式查詢出資料然後顯示 為了便於管理,決定將資料存在資料庫中 有人可以是雇主也可以是服務商 所以等級資料可以是一張表 加上等級變更記錄,一共兩張表 等級表為表a,變更表為表b 在等級計算中,註冊時間於當前時間計算出使...
資料庫學習記錄
基本概念 主鍵有2種主鍵的存在。一種是業務主鍵,一種是邏輯主鍵 業務主鍵通常是表裡有的資料作為主鍵使用。一般常見的就是不容易重複的資料,例如 身份證號等 邏輯主鍵就是本來一條資料沒有這個字段,但是我們擔心會出現重複資料,我們自己生成乙個讓此條資料成為唯一的重要字段,在一張表裡很明顯的主鍵建立方式是乙...
資料庫記錄處理
新建乙個表 名字為t3,屬性id為 int型別 主鍵,給自增,name 為 varchar型別 非空約束 age int 型別,int型別,非空屬性 create table t3 id int primary key auto increment,name varchar 20 not null,...