Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So konvertieren Sie eine Nur-Lese-Ruhezustandssitzung zum Schreiben während einer Transaktion (Master / Slave-DB)

Wir öffnen Transaktionen im Nur-Lese-Modus und wandeln sie dann in den Schreibmodus um, da Nur-Lese-Verbindungen kein Problem darstellen, wie es bei Salve DB der Fall ist.

Wir überschreiben das HibernateTemplate Klasse und erstellen Sie Methoden, um eine Sitzung im Schreibmodus zu erstellen

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

In der Anwendungslogik prüfen wir vor dem Schreiben,
Verbindung befindet sich im Schreibmodus und schreiben dann einfach.
Anderenfalls, wenn die Verbindung schreibgeschützt ist, stellen Sie sie zuerst in den Schreibmodus, führen Sie einen Schreibvorgang durch und machen Sie sie wieder zurück in den schreibgeschützten Zustand