![見出し画像](https://assets.st-note.com/production/uploads/images/172964848/rectangle_large_type_2_b75d6e91acc093dac30a732732054e1f.png?width=1200)
接続プール(CONNECTION POOL)について
Javaアプリケーションサーバー(APサーバー)で接続プールを利用する。
1. 接続プールの利用開始
Javaで接続プールを利用するには、主に以下の手順を踏みます。
データソースの設定: アプリケーションサーバーにデータソースを登録します。データソースは、接続プールの設定情報 (URL, ユーザー名, パスワードなど) を持ちます。
JNDI (Java Naming and Directory Interface) 参照: アプリケーションからJNDIを介してデータソースを取得します。
接続の取得: データソースからConnectionオブジェクトを取得します。この時、接続プールから利用可能な接続が払い出されます。
SQL実行: 取得したConnectionオブジェクトを使ってSQLを実行します。
接続の返却: 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アプリケーションサーバーでの接続プール利用について理解を深めてください。