sql >> Database >  >> RDS >> Mysql

hoe een alleen-lezen-slaapsessie te converteren om te schrijven tijdens een transactie (Master/Slave DB)

We openen transacties in de alleen-lezen modus en converteren deze vervolgens naar de schrijfmodus, omdat alleen-lezen verbindingen geen probleem zullen zijn zoals bij salve DB.

We overschrijven de HibernateTemplate class en maak methoden om een ​​sessie in de schrijfmodus te maken

 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 toepassingslogica controleren we voordat we schrijven
Verbinding in schrijfmodus staat en dan gewoon schrijven.
Anders, als de verbinding alleen-lezen is, zet deze dan eerst in de schrijfmodus, voer de schrijfbewerking uit en maak hem weer terug naar alleen-lezen




  1. Unieke waarden afdwingen over twee tabellen

  2. Nieuwe kolomwijzigingen met alleen metagegevens in SQL Server 2016

  3. mysql vervangen door alternatief

  4. MySql selecteren op velden die null-waarden bevatten