私のアプリケーションがMySQLデータベースへの接続を失うことがあります。 良い解決策は、しばらくしてから再コミットしようとするいくつかのタイマーをスケジュールすると思います。 それはどれくらいうまくできますか? dbとconnectoしようとする別スレッドかもしれませんか?あるいは、スタンダードプラクティスが存在する?おかげさまで 接続の喪失を管理するためのjdbcの標準的な方法は何ですか?
答えて
JDBCは、Javaデータベースアプリケーションの構築を開始するのに最適な方法ですが、オブジェクトマッピングと接続/トランザクションを管理することで、多くのプログラマーが既に何度も書いているボイラープレートとロジックの書き換えに非常に迅速になります。
ハイスループットアプリケーションを使用している場合を除き、通常は接続を失う/閉じる必要があります。この場合、複数の接続を有効にしておくことができます(これは接続プーリングと呼ばれます)。
3「高レベル」は、基本的にありますが、効率的な接続や取引の維持へのアプローチ:
1)最も簡単な解決策は、あなたが必ずそれが有効であることを確認するために、接続を再利用する際に確認するか、再度開くことです毎回。
2)より洗練された解決策は、接続プール機構(apache http://commons.apache.org/dbcp/ dbcpライブラリなど)を使用することです。
3)最後に、私の意見では、最も保守性ソリューションは、iBATISのは/あなたにオブジェクトリレーショナルマッピング/取引/データベースの状態を管理するためのシンプルな、宣言型インタフェースを提供しますをHibernateのようなJDBCフレームワークを使用することです - また、接続ロジックを透過的に維持します。
ALSO:オブジェクトリレーショナルマッピングがあなたのものでない場合は、DBUtilsなどのフレームワークをApacheで使用して、クエリと接続を管理できます。
JDBCは、異なるデータベースシステムの操作を抽象化するための簡単なAPIです。それは、java型のような異なるネイティブ型のような、何かを均一にします。
ただし、接続が失われていることも大きな問題です。接続プールライブラリを使用するほうが、自分で新しいライブラリを作成するよりも優れています。バグのない状態で接続プールを最初から実装することは、あまりにも多くの詳細です。
は、成熟したライブラリを使用するように考えてみましょう:
- コモンズ-DBCP
- コモンズDBCPはコモンズプールに基づいています
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設定が役立ちます。
- 1. Pythonでノーオペレーションを行うための標準的な方法は何ですか?
- 2. Kerasモデルの標準出力は何を意味しますか?ケラスの時代と喪失は何ですか?
- 3. MongoJSとの接続を管理する適切な方法は何ですか?
- 4. プロジェクトでAndroidコードを整理する標準的な方法は何ですか
- 5. Javaのosファイルシステムレベルでファイルを管理するための標準ソリューションですか?
- 6. 竜巻でのユーザーセッションを処理する標準的な方法
- 7. DjangoでJSONデータを提供するための正当な/標準的な方法は何ですか?
- 8. APNSデバイストークンを更新するための標準的な方法ですか?
- 9. COMベースのライブラリを初期化するための "標準的な"方法は何ですか?
- 10. Postgresデータベースを操作するスクリプトを書くための標準的な方法は何ですか?
- 11. groovyでラクダのケースストリングを管理する標準的な方法はありますか?
- 12. RACデータベースに接続するための正しいJDBC URLは何ですか
- 13. モジュールをPython標準ライブラリからローカルディレクトリにインストールする標準的な方法は何ですか?
- 14. exmppで失われた接続を処理する方法は?
- 15. XMLでヌル属性値を表すための標準的な方法は?
- 16. jQuery Mobileでエラーを表示する標準的な方法は何ですか
- 17. AndroidでRPCを使用する標準的な方法は何ですか?
- 18. Qtライブラリを標準C++プロジェクトに接続する方法は?
- 19. 動的に作成されたデータベースへの接続を管理する方法
- 20. 幾何学的点をエミュレートするためのPython標準モジュール
- 21. Qtアプリケーションでウィンドウを管理する標準的な方法はありますか?
- 22. MongoDBの失効した接続を処理する方法
- 23. プレイフレームワークモジュールのテストを書くための標準は何ですか?
- 24. Mac App Storeで許可されている継続的に実行されているアプリケーションを書くための標準的な方法は何ですか?
- 25. iPhone MVCコードをXCodeで整理する標準的な方法は何ですか?
- 26. .NET/SQL Server環境でデータベースのバージョン管理を管理する一般的な方法は何ですか?
- 27. ソース管理システムでプログラムの所有権を管理する効果的な方法は何ですか?
- 28. jdbcでMySQLに接続する準備ができたBean?
- 29. mysql_num_rowsは効率的かつ/または標準的な方法ですか?
- 30. 大量のAjaxページでバック・ボタン/リンクをサポートするための標準的なテクニック/ライブラリは何ですか?
適切な回答が見つかりました[こちら](http://stackoverflow.com/questions/8345133/when-my-app-loses-connection-how-should-i-try-to-recover)。 –
[Apache DBCP](http://commons.apache.org/dbcp/)のような接続プールを使用してください。 –