Javaデータベース接続プールの詳細な説明
データベース接続プーリングの原則は次のとおりです。
接続プーリングの基本的なアイデアは、システムが初期化されたときにメモリにオブジェクトとしてデータベース接続を保存することです。ユーザーがデータベースにアクセスする必要がある場合、新しい接続を確立する代わりに、接続プールから確立された自由接続オブジェクトが取り出されます。使用後、ユーザーは接続を閉じませんが、接続を接続プールに戻し、次のリクエストにアクセスします。接続の確立と切断は、接続プール自体によって管理されます。同時に、接続プールの接続プールの初期数、接続の上限と下限、各接続の使用時間の最大数、最大アイドル時間などを制御することもできます。接続プールのパラメーターを設定することもできます。また、独自の管理メカニズムを介して、データベース接続、使用量などの数を監視することもできます。
一般的に使用されるデータベース接続プール:
一般的に使用されるデータベース接続プールには、JNDI、C3P0、ApacheのJakarta、DBCPBonecpが含まれます。その中で、Singフレームワークに依存している第三者はC3P0およびDBCPを使用しています。 BONECPは、最速のデータベース接続プールと言われています。 JNDIメソッドによって作成されたDataSourceは、Javax.sql.DataSourceを実際に実装しています(他の3つの方法のいずれもありません)
次に、主にJNDIメソッドの使用方法を紹介します。この方法は、java.sql.datasourceを実装するために、Webサーバー(たとえばTomcat、weblogic、websphere、tomcat)によって実装されています。 Webサーバーは、データソースの初期化、接続の作成、接続の割り当てと管理を担当します。 Webサーバー自体によって実装される関数であるため、プロジェクトに特別なJARパッケージを導入する必要はありませんが、サーバーの一部の構成ファイルに関連する構成を追加する必要があります。次に、この方法の使用を説明するための例として、Tomcatサーバー(データベースはMySQL)を使用します。
データベースの作成と初期化:
テーブルテストを作成します(ID INTプライマリキー、名前VARCHAR(10)、価格フロート)テスト値に挿入(1、「英語」、22.2);テスト値に挿入(2、 'MATH'、78.9);テスト値に挿入(3、 'history'、77.9);
1.データドライバーmysql-connector-java-5.0.3-bin.jarをTomcatディレクトリのlibに入れます
2。Tomcatのconfの下でContext.xmlファイルを変更し、リソース構成のサポートを追加します
<リソースAuth = "Container" DriverClassName = "com.mysql.jdbc.driver" maxactive = "100" maxidle = "30" maxwait = "10000" name = "jdbc/ewsdb" username = "root" password = "admin" type = "javax.sql.datasource" url = "jdbc:mysql:// localhost:3306/test1"/>
<リソース属性説明>
1)名前:リソースのJNDI名を指定します。
2)AUTH:リソースを管理するマネージャーを指定します。リソースには、コンテナとアプリケーションの2つのオプションの値があります。コンテナとは、コンテナがリソースを作成および管理することを意味し、アプリケーションはWebアプリケーションがリソースを作成および管理することを意味します。
3)タイプ:リソースのJavaクラス名を指定します。
4)ユーザー名:データベースに接続するユーザー名を指定します。
5)パスワード:データベースに接続するパスワードを指定します。
6)DriverClassName:データベースに接続するJDBCドライブのドライバー実装クラスの名前を指定します。
7)URL:データベースに接続するURLを指定します。 127.0.0.1は、接続するデータベースサーバーのIP、3306はデータベースサーバーポート、bookdbはデータベース名です。
8)Maxactive:データベース接続プールのアクティブなデータベース接続の最大数を指定します。値は0であり、制限されていないことを示しています。
9)Maxidle:アイドル状態のデータベース接続プールのデータベース接続の最大数を指定します。値は0であり、制限されていないことを示しています。
10)MaxWait:データベース接続プールがアイドル状態になる最大時間(ミリ秒単位)を指定します。この時間の後、例外がスローされます。値は-1です。つまり、無期限に待つことができます。
maxactive = "100"
並行性で接続プールから取得できる接続の最大数を示します。データベースがアプリケーションに単独で使用されていない場合、Maxactiveパラメーターを設定すると、アプリケーションが他のアプリケーションから無制限の接続を取得できなくなります。データベースがアプリケーションをサポートするためにのみ使用される場合、Maxactiveは理論的には、データベースがサポートできる接続の最大数に設定できます。 Maxactiveは、接続プールを介して同時に取得できる接続の最大数を単に表します。接続の取得とリリースは双方向です。アプリケーションが接続プールを同時に要求する場合、接続プールはデータベースから接続を取得する必要があります。したがって、アプリケーションが接続を使用して接続プールへの接続を返す場合、接続プールも同時にデータベースへの接続を返しますか?明らかに答えはノーです。それが起こると、接続プールは不要になり、パフォーマンスを改善するだけでなく、代わりにパフォーマンスを削減します。では、接続が返された後にどのように対処するのでしょうか?
maxidle = "30"
並行性中にmaxactive = 100に到達した場合、接続プールはデータベースから100の接続を取得して、使用するアプリケーションを提供する必要があります。 Maxidle = 30であるため、アプリケーションが接続を閉じると、すべての接続がデータベースに返されるわけではありません。接続プールに30の接続が保持され、ステータスはアイドル状態です。
minidle =” 2”
最小値はデフォルトでは有効になりません。その意味は、接続プールにミニドルが少ない場合、システム監視スレッドが補足機能を開始することです。一般的に、補足スレッドは起動しません。
質問:MaxactiveとMaxidleを設定する方法は?
理論的には、Maxactiveはアプリケーションの最大並行性数に設定する必要があります。そうすることで、最大並行性の場合でも、アプリケーションは接続プールから接続を取得できます。ただし、難易度は、最大並行性数を正確に推定することが難しいことです。最大並行性数に設定することは、最適なサービス品質保証です。
Maxidleの対応する接続は、実際には接続プールによって維持される長い接続です。これは、接続プールが利点を発揮する部分でもあります。理論的には、より長い接続を維持することは、リクエストを適用するときにより速く応答する可能性がありますが、接続が多すぎるとデータベースで大量のリソースが消費されます。したがって、マキシドルが大きいほど良いです。上記と同じ例では、55などの50-100で50に近い数値にmaxidleを設定することをお勧めします。これにより、最大並行性を考慮しながらデータベース接続を維持できます。ほとんどの場合、アプリケーションに最速の対応速度を提供できます。
3.アプリケーションのweb.xmlファイルを開き、次の構成を追加します
<Resource-Ref> <説明> DB接続</description> <res-ref-name> jdbc/ewsdb </res-ref-name> <res-type> javax.sql.datasource </res-type> <res-auth> container </res-auth> </resourf>
<sostance-ref>属性説明:
1)説明:参照されたリソースの説明。
2)res-ref-name:参照されたリソースのJNDI名を指定し、<sostence>要素の名前属性に対応します。
3)RESタイプ:参照されたリソースのクラス名を指定し、<sorstice>要素の型属性に対応します。
4)res-auth:参照されたリソースを管理するマネージャーを指定し、<リソース>要素のauth属性に対応しています
4.次のように、Javaコードを書いてTomcat環境に入れてください
JSPの作成例:myjsp.jsp
<%@ page Language = "Java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> < Import = "Java.io.*"%> <%@ページインポート= "java.util。*"%> <%@ page import = "java.sql。*"%@ page import = "java.sql。*"%@ page import = "javax.sql。 Import = "Javax.sql。*"%> <%@ページインポート= "javax.sql。ステートメントstmt;結果rs;コンテキストctx = new initialContext(); DataSource ds =(dataSource)ctx.lookup( "java:comp/env/jdbc/ewsdb"); conn = ds.getConnection(); stmt = conn.createstatement(); //クエリレコードrs = stmt.executequery( "id、name、select from test"); //出力クエリ結果out.println( "<table border = 1 width = 400>"); while(rs.next()){string col1 = rs.getString(1);文字列col2 = rs.getString(2); float col3 = rs.getfloat(3); //表示されたデータを印刷してください。println( "<tr> <td>"+col1+"</td> <td>"+col2+"</td> <td>"+col3+"</td> </tr>");} out.println( "</table>"); //結果セット、SQL宣言、およびデータベース接続rs.Close()を閉じます。 stmt.close(); conn.close(); } catch(例外e){out.println(e.getmessage()); e.printstacktrace(); }%> </body> </html>ブラウザにhttp:// localhost:8080/test/myjsp.jspを入力して、結果を表示します
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!