使用spring + hibernate使用MySql复制,我有一个简单的问题;
打开的事务处于只读模式,即指向从DB。 如果我想在该交易期间保存/更新/删除任何东西,将它转换为写入模式的最佳方法是什么?
我不希望打开写模式事务,因为大多数时候我都想读取内容。
我是否需要覆盖复制驱动程序/ Hibernate模板?
答案 0 :(得分:1)
我们以只读模式打开事务,然后将其转换为写入模式,因为只读连接不会像salve 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);
}
};
在写入之前的应用程序逻辑中,我们检查
连接处于写入模式,然后简单地写入
否则,如果只读连接,则首先使其处于写入模式,执行写入操作并再次将其恢复为只读