2012-01-25 10 views
1

私のアプリケーションがMySQLデータベースへの接続を失うことがあります。 良い解決策は、しばらくしてから再コミットしようとするいくつかのタイマーをスケジュールすると思います。 それはどれくらいうまくできますか? dbとconnectoしようとする別スレッドかもしれませんか?あるいは、スタンダードプラクティスが存在する?おかげさまで 接続の喪失を管理するためのjdbcの標準的な方法は何ですか?

+0

適切な回答が見つかりました[こちら](http://stackoverflow.com/questions/8345133/when-my-app-loses-connection-how-should-i-try-to-recover)。 –

+1

[Apache DBCP](http://commons.apache.org/dbcp/)のような接続プールを使用してください。 –

答えて

2

JDBCは、Javaデータベースアプリケーションの構築を開始するのに最適な方法ですが、オブジェクトマッピングと接続/トランザクションを管理することで、多くのプログラマーが既に何度も書いているボイラープレートとロジックの書き換えに非常に迅速になります。

ハイスループットアプリケーションを使用している場合を除き、通常は接続を失う/閉じる必要があります。この場合、複数の接続を有効にしておくことができます(これは接続プーリングと呼ばれます)。

3「高レベル」は、基本的にありますが、効率的な接続や取引の維持へのアプローチ:

1)最も簡単な解決策は、あなたが必ずそれが有効であることを確認するために、接続を再利用する際に確認するか、再度開くことです毎回。

2)より洗練された解決策は、接続プール機構(apache http://commons.apache.org/dbcp/ dbcpライブラリなど)を使用することです。

3)最後に、私の意見では、最も保守性ソリューションは、iBATISのは/あなたにオブジェクトリレーショナルマッピング/取引/データベースの状態を管理するためのシンプルな、宣言型インタフェースを提供しますをHibernateのようなJDBCフレームワークを使用することです - また、接続ロジックを透過的に維持します。

ALSO:オブジェクトリレーショナルマッピングがあなたのものでない場合は、DBUtilsなどのフレームワークをApacheで使用して、クエリと接続を管理できます。

1

JDBCは、異なるデータベースシステムの操作を抽象化するための簡単なAPIです。それは、java型のような異なるネイティブ型のような、何かを均一にします。

ただし、接続が失われていることも大きな問題です。接続プールライブラリを使用するほうが、自分で新しいライブラリを作成するよりも優れています。バグのない状態で接続プールを最初から実装することは、あまりにも多くの詳細です。

は、成熟したライブラリを使用するように考えてみましょう:

  • コモンズ-DBCP
  • コモンズDBCPはコモンズプールに基づいています

bonecp

  • など。 両方の設定可能なオプションを理解する必要があります。 bonecpは別の新しい接続プールであり、ロックはその利点ではありません。

    検証済みSQL文字列は、接続が停止しているかどうかを確認するために重要です。 妥当性検査の文字列セットによって接続検査を無効にします。ここで

    はDBCP設定ページです: http://commons.apache.org/dbcp/configuration.html

    それは言う:

    NOTE - どんな効果を持っている真の値のため、validationQuery パラメータがnull以外の文字列に設定する必要があります。例えば

    dataSource.setValidationQuery(isDBOracle() ? "select 1 from dual" : "select 1"); 
        dataSource.setTestWhileIdle(true); 
        dataSource.setTestOnReturn(true); 
        dataSource.setRemoveAbandoned(true); 
        dataSource.setRemoveAbandonedTimeout(60 * 3 /* 3 mins */); 
    
        dataSource.setMaxIdle(30); 
        dataSource.setMaxWait(1000 * 20 /* 20 secs*/); 
    

    思い出させる:あなたは、WebLogicに共通DBCPを使用する場合は、サーバー内の古いコモンズライブラリを忘れないでください、それはあなたのアプリケーションが異なるバージョンを使用し駆動します。 prefer-web-inf-classes設定が役立ちます。

  • 関連する問題