sql >> Databáze >  >> RDS >> Mysql

jak převést relaci hibernace pouze pro čtení na zápis během transakce (Master/Slave DB)

Transakce otevíráme v režimu pouze pro čtení a poté je převádíme do režimu zápisu, protože připojení pouze pro čtení nebudou problémem, jako je tomu u salve DB.

Přepíšeme HibernateTemplate třídy a vytvořte metody pro vytvoření relace v režimu zápisu

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

V aplikační logice před zápisem zkontrolujeme
Připojení je v režimu zápisu a poté jednoduše zapište.
jinak, pokud je připojení pouze pro čtení, nejprve jej přepněte do režimu zápisu, proveďte operaci zápisu a znovu jej převeďte zpět do režimu pouze pro čtení




  1. MySQL:SELECT a COUNT ve stejném dotazu

  2. Vyhněte se těmto 4 běžným chybám DBA

  3. MySQL Fulltextové vyhledávání a SOUNDEX

  4. Změny v my.cnf se neprojeví (Ubuntu 16.04, mysql 5.6)