Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como converter uma sessão de hibernação somente leitura para gravação durante uma transação (Master/Slave DB)


Abrimos transações no modo somente leitura e depois as convertemos para o modo de gravação, pois as conexões somente leitura não serão um problema, pois é com o banco de dados salve.

Substituímos o HibernateTemplate class e crie métodos para fazer a sessão no modo de gravação
 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);
    }
};

Na lógica da aplicação, antes de escrever, verificamos
A conexão está no modo de gravação e, em seguida, simplesmente escreve.
se a conexão for somente leitura, primeiro faça-a no modo de gravação, faça a operação de gravação e, novamente, volte para somente leitura