Mysql
 sql >> Database >  >> RDS >> Mysql

come convertire una sessione di ibernazione di sola lettura in scrittura durante una transazione (DB Master/Slave)

Apriamo le transazioni in modalità di sola lettura e quindi le convertiamo in modalità di scrittura poiché le connessioni di sola lettura non saranno un problema come lo è con salve DB.

Sovrascriviamo HibernateTemplate classe e creare metodi per rendere la sessione in modalità scrittura

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

Nella logica dell'applicazione prima di scrivere controlliamo
La connessione è in modalità di scrittura, quindi scrivi semplicemente.
altrimenti se la connessione è di sola lettura, prima falla in modalità di scrittura, esegui l'operazione di scrittura e poi torna in sola lettura