0
使用Spring + hibernate進行MySql複製,我有一個快速問題;如何在事務(主/從DB)中將只讀休眠會話進行轉換
打開的事務處於只讀模式,即指向從DB。 如果我想在該事務期間保存/更新/刪除任何事物,將其轉換爲寫入模式的最佳方法是什麼?
我不想打開一個寫模式的事務,因爲大部分時間我都想讀東西。
我是否需要覆蓋複製驅動程序/休眠模板這個東西?
使用Spring + hibernate進行MySql複製,我有一個快速問題;如何在事務(主/從DB)中將只讀休眠會話進行轉換
打開的事務處於只讀模式,即指向從DB。 如果我想在該事務期間保存/更新/刪除任何事物,將其轉換爲寫入模式的最佳方法是什麼?
我不想打開一個寫模式的事務,因爲大部分時間我都想讀東西。
我是否需要覆蓋複製驅動程序/休眠模板這個東西?
我們以只讀模式打開事務,然後將其轉換爲寫模式,因爲只讀連接不會像使用從DB一樣成爲問題。
我們覆蓋的HibernateTemplate 類,創造方法,使在寫入模式
public final void writeEnabled(){
getSession().doWork(jdbcWorkWriteEnabled);
}
public final void writeDisabled(boolean flush){
if(flush)
flush();
getSession().doWork(jdbcWorkWriteDisabled);
}
public static final void writeEnabled(Session session){
session.doWork(jdbcWorkWriteEnabled);
}
public static final void writeDisabled(boolean flush,Session session){
if(flush)
session.flush();
session.doWork(jdbcWorkWriteDisabled);
}
final static Work jdbcWorkWriteEnabled = new Work(){
public void execute(Connection connection) throws SQLException {
connection.setReadOnly(false);
}
};
final static Work jdbcWorkWriteDisabled = new Work(){
public void execute(Connection connection) throws SQLException {
connection.setReadOnly(true);
}
};
在應用程序邏輯寫入前會議上,我們檢查
連接在寫模式,然後簡單地寫。
否則如果連接是隻讀的,那麼首先使其處於寫入模式,進行寫入操作並再次使其恢復爲只讀
如果事務必須寫入,則不能以只讀模式打開。這很簡單。 Hibernate只會寫入需要寫入的內容,而只讀事務的速度並不比讀寫速度快得多。不要試圖過早優化。 – 2012-01-01 17:13:06
在少數交易中,他們不是必須寫的,即基於少量條件或閱讀,寫作是可選的。 – mtariq 2012-01-02 04:56:19
您是否找到解決這個問題的方法? – 2012-05-30 07:40:26