sql >> データベース >  >> RDS >> Mysql

トランザクション中に読み取り専用の休止状態セッションを書き込みに変換する方法(マスター/スレーブDB)

    トランザクションを読み取り専用モードで開き、それを書き込みモードに変換します。これは、salveDBの場合のように読み取り専用接続が問題になることはないためです。

    HibernateTemplateをオーバーライドします 書き込みモードでセッションを作成するためのクラスおよび作成メソッド

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

    書き込み前のアプリケーションロジックで、
    接続が書き込みモードになっていることを確認してから、単純に書き込みます。
    接続が読み取り専用の場合は、最初に書き込みモードにし、書き込み操作を実行してから、再度読み取り専用に戻します>


    1. JSF+EJBアプリケーションでDB例外をキャッチする

    2. SELECTクエリから直接IPとIP+CIDR​​を一致させる方法はありますか?

    3. switchステートメントにコンマで値を挿入する方法

    4. この複雑なEAVMYSQLクエリを最適化する方法は?