Mysql
 sql >> Base de données >  >> RDS >> Mysql

comment convertir une session d'hibernation en lecture seule en écriture lors d'une transaction (base de données maître/esclave)

Nous ouvrons les transactions en mode lecture seule, puis les convertissons en mode écriture, car les connexions en lecture seule ne seront pas un problème comme c'est le cas avec salve DB.

Nous remplaçons le HibernateTemplate classer et créer des méthodes pour créer une session en mode écriture

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

Dans la logique de l'application avant l'écriture, nous vérifions
La connexion est en mode écriture, puis écrivez simplement.
Sinon, si la connexion est en lecture seule, faites-la d'abord en mode écriture, effectuez l'opération d'écriture et revenez en lecture seule