見出し画像

接続プール(CONNECTION POOL)について


Javaアプリケーションサーバー(APサーバー)で接続プールを利用する。

1. 接続プールの利用開始

Javaで接続プールを利用するには、主に以下の手順を踏みます。

  1. データソースの設定: アプリケーションサーバーにデータソースを登録します。データソースは、接続プールの設定情報 (URL, ユーザー名, パスワードなど) を持ちます。

  2. JNDI (Java Naming and Directory Interface) 参照: アプリケーションからJNDIを介してデータソースを取得します。

  3. 接続の取得: データソースからConnectionオブジェクトを取得します。この時、接続プールから利用可能な接続が払い出されます。

  4. SQL実行: 取得したConnectionオブジェクトを使ってSQLを実行します。

  5. 接続の返却: SQL実行後、Connectionオブジェクトを接続プールに返却します。

2. 接続プールの終了

アプリケーションの終了時や、データソースが不要になった場合には、接続プールを終了させる必要があります。

  • データソースの破棄: アプリケーションサーバーの管理機能やAPIを使って、データソースを破棄します。

  • プール内の接続のクローズ: 接続プール内の全てのConnectionオブジェクトをクローズします。

3. 必要なアプリ・プログラム

  • JDBCドライバ: データベースに接続するためのJDBCドライバが必要です。

  • データソース設定: アプリケーションサーバーにデータソースを登録するための設定ファイル (context.xmlなど) が必要です。

  • JNDI API: JNDIを介してデータソースを取得するためのAPIが必要です。

  • 接続プールライブラリ: アプリケーションサーバーが提供する接続プール機能、またはBoneCP, Commons DBCPなどの外部ライブラリを利用できます。

4. Tomcatの設定項目

Tomcatで接続プールを設定するには、context.xmlファイルに以下の要素を追加します。

<Context>
  <Resource name="jdbc/mydb" auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"  url="jdbc:mysql://localhost:3306/mydb"  username="myuser"  password="mypassword"  maxActive="100"  maxIdle="30"  minIdle="10"  maxWait="10000"  />
</Context>
  • name: JNDI名

  • type: データソースの型

  • driverClassName: JDBCドライバクラス名

  • url: データベースURL

  • username: ユーザー名

  • password: パスワード

  • maxActive: 最大接続数

  • maxIdle: アイドル時の最大接続数

  • minIdle: アイドル時の最小接続数

  • maxWait: 接続取得時の最大待ち時間

5. 接続プールの状態遷移

接続プールの状態は、以下の4つに分類できます。

  • 初期状態: 接続プールが作成された直後で、まだ接続がプールされていない状態。

  • 準備状態: 接続プールに最小限の接続がプールされた状態。minIdleの設定値によってプールされる接続数が決まります。

  • 使用中: アプリケーションから接続要求があり、プールされた接続が払い出されている状態。

  • 枯渇状態: プール内の全ての接続が使用中で、新しい接続要求が来た場合に、maxWait時間まで待機する状態。

これらの状態は、アプリケーションの接続要求状況や、プール内の接続数によって遷移します。

6. 接続プール利用時の注意点

  • リーク: アプリケーションで取得した接続を適切にクローズしないと、接続プールに接続が返却されず、接続リークが発生する可能性があります。

  • デッドロック: 複数のスレッドが互いに接続を待ち合わせる状態になると、デッドロックが発生する可能性があります。

  • タイムアウト: 接続取得時にmaxWait時間を超えると、タイムアウトが発生し、例外がスローされます。

7. その他

  • アプリケーションサーバーによっては、接続プールの監視機能や管理機能が提供されています。

  • 接続プールの設定は、データベースの性能やアプリケーションの要件に合わせて調整する必要があります。

これらの情報を参考に、Javaアプリケーションサーバーでの接続プール利用について理解を深めてください。


いいなと思ったら応援しよう!