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

再デプロイするたびに接続プールをフラッシュする必要があるのはなぜですか?

    根本的な原因、PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure このGlassfishのバグに関連しています 、これは(下部のコメントタブで)無効な接続を更新する必要があるかもしれないことを説明しています。

    Jagadishによるバグコメント 接続検証タイプを確認するように指示します。 「autocommit」(デフォルト)に設定されている場合、JDBCドライバーは以前の接続検証データをキャッシュする可能性があり、将来の接続検証中に実際のデータベースの相互作用は発生しません。

    この問題を解決するには、connection-validation-method="table"を設定します およびvalidation-table-name="any_table_you_know_exists"any_table_you_know_existsを置き換えます 既存のテーブルの名前で)。これを行うと、接続はキャッシュではなくデータベースと通信するようになります。接続が無効な場合、接続は削除されて再作成されます。 is-connection-validation-required="true"も指定する必要がある場合があります 。

    追加の構成に役立つ記事:

    1. この記事 問題についても詳しく説明しています。
    2. JagadishのOracleブログ記事 このトピックに関する詳細情報があります。
    3. 記事 GlassfishJDBC接続検証の詳細を説明します。

    ジャガディシュのブログからのテキスト:

    AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required=true
    domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required = true
    
    AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method=table
    domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method = table
    
    bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name=sys.systables
    domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name = sys.systables
    

    サンプルコードはsys.systablesを参照していることに注意してください 、これは存在が保証されているMSSQLテーブルです。 Oracleについては、保証されたテーブルdualを参照してください。 。 MySQLの場合、検証目的でのみ1列のテーブルを作成します。安全にプレイし、1行のデータを挿入してテーブルに事前入力します。



    1. PostgreSQLでの日付、時刻、間隔の表現

    2. 注文なしですべての顧客を取得するSQLステートメント

    3. 削除された行が占めるスペースは再利用されますか?

    4. 外部キーから複合キーへ