sql >> Base de Datos >  >> RDS >> Mysql

cómo convertir una sesión de hibernación de solo lectura para escribir durante una transacción (Master/Slave DB)

Abrimos transacciones en modo de solo lectura y luego las convertimos a modo de escritura, ya que las conexiones de solo lectura no serán un problema como lo es con salve DB.

Anulamos la HibernateTemplate clase y crear métodos para hacer sesión en modo escritura

 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);
    }
};

En la lógica de la aplicación, antes de escribir, verificamos
La conexión está en modo de escritura y luego simplemente escribe.
De lo contrario, si la conexión es de solo lectura, primero hágala en modo de escritura, realice la operación de escritura y nuevamente vuelva a solo lectura