OceanBase logo

OceanBase

トランザクション処理、分析、AIワークロードに最適な分散データベース

プロダクト概要
デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

ドキュメント

会社概要

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

トラストセンター

法的情報

お問い合わせ

日本 - 日本語
International - English
中国站 - 简体中文
クラウドで始める

OceanBase

トランザクション処理、分析、AIワークロードに最適な分散データベース

プロダクト概要
デプロイを自由に

OceanBase Cloud

OceanBaseの導入とスケーリングを最適化

エンタープライズ版

自社インフラ上での運用・管理に対応

オープンソース版を試す

コミュニティ版

開発者向けオープンソース分散データベース

OceanBase seekdb

AIネイティブなオープンソースの検索データベース

顧客事例

さまざまな業界の企業による導入事例を紹介します。

さらに見る
利用シーン別

あらゆるシナリオに対応するOLTP

ハイブリッドクラウドソリューション

大容量ストレージデータベースのコスト削減

リアルタイム分析混合ワークロード

複数インスタンスの統合

OceanBaseの企業情報、パートナーシップ、そして信頼性・セキュリティへの取り組みについて紹介します。

OceanBaseについて

トラストセンター

法的情報

お問い合わせ

クラウドで始める
编组
すべての製品
    • データベース
    • アイコンOceanBaseデータベース
    • アイコンOceanBase Cloud
アイコン

OceanBase Cloud

すべてのバージョン

    OceanBase ロゴ

    AI時代を支える分散データベース

    日本 - 日本語
    International - English
    中国站 - 简体中文
    プロダクト
    OceanBase Cloudエンタープライズ版コミュニティ版OceanBase seekdb
    会社概要
    OceanBaseについてトラストセンター法的情報お問い合わせ
    公式アカウント
    ConnpassXQiitaLumaGitHub

    © OceanBase 2026. All rights reserved

    クラウドサービス契約個人情報保護ポリシーセキュリティ
    お問い合わせ
    ドキュメントフィードバック
    1. ホーム
    2. OceanBase Cloud
    3. master
    アイコンOceanBase Cloud
    master
    データベース
    • OceanBaseデータベース
    • OceanBase Cloud
    • master

    Proxool接続プールを使用したOB Cloudデータベース接続サンプルプログラム

    最終更新日:2026-06-08 08:05:36  更新
    シェア
    このページの内容
    前提条件
    手順
    ステップ1:proxool-oceanbase-clientプロジェクトをIntelliJ IDEAにインポートする
    ステップ2:proxool-oceanbase-clientプロジェクトのデータベース接続情報を修正する
    ステップ3:proxool-oceanbase-clientプロジェクトを実行する
    プロジェクトコードについて
    pom.xmlコードの紹介
    db.propertiesコードの紹介
    Main.javaコードの紹介
    全コード表示
    関連ドキュメント

    折りたたみ

    シェア

    本記事では、Proxool接続プール、OceanBase Connector/J、およびOB Cloudを使用してアプリケーションを構築し、テーブルの作成、データの挿入、削除、更新、クエリなどの基本的なデータベース操作を実現する方法について説明します。

    クリックしてproxool-oceanbase-clientサンプルプロジェクトをダウンロード Proxool接続プールを使用したOB Cloud接続サンプルプログラム(Oracleモード)

    前提条件

    • OB Cloudデータベースアカウントに登録し、クラスタインスタンスとOB CloudのOracleモードテナントを作成していること。詳細については、クラスタインスタンスの作成およびテナントの作成を参照してください。

    • 対象のOracle互換モードテナントの接続文字列を取得済みであること。詳細な操作については、接続文字列の取得を参照してください。

    • JDK 1.8とMavenをインストール済みであること。

    • IntelliJ IDEAをインストール済みであること。

      説明

      このドキュメントでコードを実行するために使用したツールはIntelliJ IDEA Community Edition 2021.3.2ですが、個人の好みに応じて適したツールを選択してサンプルコードを実行することもできます。

    手順

    説明

    本記事で示す操作手順は、Windows環境でIntelliJ IDEA Community Edition 2021.3.2を使用してこのプロジェクトをコンパイルおよび実行する場合のものです。他のOS環境やコンパイラを使用する場合は、手順が若干異なる可能性があります。

    ステップ1:proxool-oceanbase-clientプロジェクトをIntelliJ IDEAにインポートする

    1. IntelliJ IDEAを開きます。

    2. ウェルカム画面で、Openオプションをクリックし、プロジェクトのディレクトリに移動します。プロジェクトのルートディレクトリを選択して、OKをクリックします。

      1

    3. IntelliJ IDEAは、プロジェクトのタイプを自動的に検出し、プロジェクトを読み込みます。

      説明

      IntelliJ IDEAでMavenプロジェクトをインポートすると、IntelliJ IDEAはプロジェクト内のpom.xmlファイルを自動的に検出し、その記述に基づいて必要な依存ライブラリをダウンロードしてプロジェクトに追加します。

      2

    4. (オプション)未解決の依存関係を手動でインポートします。

      pom.xml ファイルに対応する依存関係がすべてプロジェクトに自動的にインポートされている場合は、この手順を無視してください。

      IntelliJ IDEAのSyncウィンドウのヒントから、proxool-cglib と proxool の依存関係が解決されていないことがわかります。proxool-oceanbase-client プロジェクトのルートディレクトリにある lib フォルダには、proxool-cglib と proxool の jar ファイルがあります。これらをプロジェクトに追加する手順は以下のとおりです:

      1. IntelliJ IDEAで、File > Project Structure をクリックして、プロジェクト構造の設定に入ります。
      2. 左側のパネルで、Modulesを選択します。
      3. 右側のモジュールリストで、Dependenciesタブを選択し、このページの + アイコンをクリックして、JARs or directoriesを選択します。
      4. ポップアップダイアログで、jar ファイルが保存されている lib ディレクトリに移動し、jar ファイルを選択して、OKをクリックします。
      5. Dependenciesタブで、新しく追加された jar ファイルがリストに表示されます。
      6. ApplyまたはOKをクリックして変更を保存します。

      3

    ステップ2:proxool-oceanbase-clientプロジェクトのデータベース接続情報を修正する

    前提条件で取得した接続文字列の情報に基づいて、proxool-oceanbase-client/src/main/resources/db.properties ファイル内のデータベース接続情報を修正します。

    例:

    ...
    jdbc-1.proxool.driver-url=jdbc:oceanbase://t5******.********.oceanbase.cloud:1521/test_schema001
    jdbc-1.user=test_user
    jdbc-1.password=******
    ...
    
    • 接続アドレスは t5******.********.oceanbase.cloud です。
    • アクセスポートは1521を使用します。
    • アクセスするデータベース名は test_schema001 です。
    • テナントの接続アカウントは test_user です。
    • パスワードは ****** です。

    ステップ3:proxool-oceanbase-clientプロジェクトを実行する

    1. プロジェクトのナビゲーションバーで、src/main/java/com.exampleディレクトリを見つけて展開します。

    2. Mainファイルを右クリックし、**Run 'Main.main()'**を選択します。

    3. IntelliJ IDEAは、このプロジェクトを自動的にコンパイルして実行し、実行パネルに出力結果を表示します。

      4

    4. OceanBaseクライアント(OBClient)で以下のSQLステートメントを実行して結果を確認することもできます。

      obclient [TEST_USER001]> SELECT * FROM test_schema001.test_proxool;
      

      実行結果は次のとおりです:

      +------+---------------+
      | C1   | C2            |
      +------+---------------+
      |    6 | test_update   |
      |    7 | test_insert7  |
      |    8 | test_insert8  |
      |    9 | test_insert9  |
      |   10 | test_insert10 |
      +------+---------------+
      5 rows in set
      

    プロジェクトコードについて

    proxool-oceanbase-client をクリックしてプロジェクトコードをダウンロードします。これは、proxool-oceanbase-client.zip という名前の圧縮ファイルです。

    解凍すると、proxool-oceanbase-client という名前のフォルダが作成されます。ディレクトリ構造は以下のとおりです:

    proxool-oceanbase-client
    ├── lib
    │    ├── proxool-0.9.1.jar
    │    └── proxool-cglib.jar
    ├── src
    │   └── main
    │       ├── java
    │       │   └── com
    │       │       └── example
    │       │           └── Main.java
    │       └── resources
    │           └── db.properties
    └── pom.xml
    

    ファイルの説明:

    • lib:プロジェクトに必要な依存ライブラリファイルを格納します。
    • proxool-0.9.1.jar:Proxool接続プールライブラリファイル。
    • proxool-cglib.jar:Proxool接続プールをサポートするためのCGLibライブラリファイル。
    • src:ソースコードのルートディレクトリです。
    • main:アプリケーションの主要なロジックを含むメインコードディレクトリです。
    • java:Javaソースコードディレクトリです。
    • com:Javaパッケージディレクトリです。
    • example:サンプルプロジェクトのパッケージディレクトリです。
    • Main.java:テーブルの作成、データの挿入、削除、更新、クエリなどのロジック処理を含むメインクラスプログラムのサンプルファイルです。
    • resources:設定ファイルなどを含むリソースファイルディレクトリです。
    • db.properties:データベース接続に関するパラメータを含む接続プールの設定ファイルです。
    • pom.xml:プロジェクトの依存関係とビルド設定を管理するために使用されるMavenプロジェクトの設定ファイルです。

    pom.xmlコードの紹介

    pom.xmlファイルはMavenプロジェクトの設定ファイルであり、プロジェクトの依存関係、プラグイン、ビルドルールなどの情報を定義しています。MavenはJavaプロジェクト管理ツールで、依存関係のダウンロード、プロジェクトのコンパイル、パッケージ化などの操作を自動化できます。

    本記事のpom.xmlファイルのコードは、主に以下の部分で構成されています:

    1. ファイル宣言ステートメント。

      このファイルがXMLファイルであり、使用するXMLバージョンが1.0、文字エンコーディング方式がUTF-8であることを宣言します。

      コード:

      <?xml version="1.0" encoding="UTF-8"?>
      
    2. POMの名前空間とPOMモデルバージョンの設定。

      1. xmlnsを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0と指定します。
      2. xmlns:xsiを使用して、XML名前空間をhttp://www.w3.org/2001/XMLSchema-instanceと指定します。
      3. xsi:schemaLocationを使用して、POMの名前空間をhttp://maven.apache.org/POM/4.0.0、POMのXSDファイルの場所をhttp://maven.apache.org/xsd/maven-4.0.0.xsdと指定します。
      4. <modelVersion>要素を使用して、このPOMファイルで使用するPOMモデルバージョンを4.0.0と指定します。

      コード:

      <project xmlns="http://maven.apache.org/POM/4.0.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
      
       <!-- その他の設定 -->
      
      </project>
      
    3. 基本情報の設定。

      1. <groupId>を使用して、プロジェクトが属する組織をcom.exampleと指定します。
      2. <artifactId>を使用して、プロジェクトの名前をproxool-oceanbase-clientと指定します。
      3. <version>を使用して、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。

      コード:

          <groupId>com.example</groupId>
          <artifactId>proxool-oceanbase-client</artifactId>
          <version>1.0-SNAPSHOT</version>
      
    4. プロジェクトソースファイルのプロパティ設定。

      Mavenのコンパイラプラグインをmaven-compiler-pluginと指定し、ソースコードとターゲットJavaバージョンをどちらも8に設定しています。これは、プロジェクトのソースコードがJava 8の機能を使用して記述されており、コンパイル後のバイトコードもJava 8ランタイム環境と互換性があることを意味します。この設定により、プロジェクトはコンパイル時および実行時にJava 8の構文と機能を正しく処理できるようになります。

      説明

      Java 1.8とJava 8は、同じバージョンの異なる命名方法です。

      コード:

          <build>
              <plugins>
                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-compiler-plugin</artifactId>
                      <configuration>
                          <source>8</source>
                          <target>8</target>
                      </configuration>
                  </plugin>
              </plugins>
          </build>
      
    5. プロジェクトが依存するコンポーネントの設定。

      1. oceanbase-client依存ライブラリを追加します。データベースへの接続と操作に使用されます:

        1. <groupId>を使用して、依存関係が属する組織をcom.oceanbaseと指定します。
        2. <artifactId>を使用して、依存関係の名前をoceanbase-clientと指定します。
        3. <version>を使用して、依存関係のバージョン番号を2.4.2と指定します。

        説明

        このセクションのコードは、プロジェクトが依存するコンポーネントがOceanBase Connector/JのV2.4.2バージョンであることを定義しています。他のバージョンの情報については、OceanBase JDBCドライバを参照してください。

        コード:

                <dependency>
                    <groupId>com.oceanbase</groupId>
                    <artifactId>oceanbase-client</artifactId>
                    <version>2.4.2</version>
                </dependency>
        
      2. proxool-cglib依存ライブラリを追加します。Proxool接続プールをサポートするためのCGLibライブラリです:

        1. <groupId>を使用して、依存関係が属する組織をproxoolと指定します。
        2. <artifactId>を使用して、依存関係の名前をproxool-cglibと指定します。
        3. <version>を使用して、依存関係のバージョン番号を0.9.1と指定します。

        コード:

                <dependency>
                    <groupId>proxool</groupId>
                    <artifactId>proxool-cglib</artifactId>
                    <version>0.9.1</version>
                </dependency>
        
      3. proxool依存ライブラリを追加します。Proxool接続プールのコアライブラリです:

        1. <groupId>を使用して、依存関係が属する組織をproxoolと指定します。
        2. <artifactId>を使用して、依存関係の名前をproxoolと指定します。
        3. <version>を使用して、依存関係のバージョン番号を0.9.1と指定します。

        コード:

                <dependency>
                    <groupId>proxool</groupId>
                    <artifactId>proxool</artifactId>
                    <version>0.9.1</version>
                </dependency>
        
      4. commons-logging依存ライブラリを追加します。アプリケーションでログ記録を行うための汎用ログライブラリです:

        1. <groupId>を使用して、依存関係が属する組織をcommons-loggingと指定します。
        2. <artifactId>を使用して、依存関係の名前をcommons-loggingと指定します。
        3. <version>を使用して、依存関係のバージョン番号を1.2と指定します。

        コード:

                <dependency>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                    <version>1.2</version>
                </dependency>
        

    db.propertiesコードの紹介

    db.properties は本記事の例となる接続プールの設定ファイルであり、接続プールの設定プロパティが含まれています。

    説明

    .properties ファイルを使用してProxool接続プールを設定する場合、以下のルールに従う必要があります:

    1. jdbc をプレフィックスとするカスタム名を使用して各接続プールを識別します。この名前はカスタマイズ可能で、各接続プールを一意に識別するために使用されます。
    2. Proxool接続プールに関連するプロパティは proxool. をプレフィックスとし、これらのプロパティはProxool接続プール自体のプロパティを設定するために使用されます。
    3. jdbc をプレフィックスとしないプロパティは無視され、Proxoolでは使用されません。
    4. proxool. をプレフィックスとしないプロパティは実際のデータベース接続に渡され、つまりこれらのプロパティは実際のデータベースドライバーに渡されます。
    Proxool接続プールの設定方法の詳細については、Configurationを参照してください。

    本記事の db.properties ファイルは、jdbc-1 という名前のデータソースの接続プールプロパティを設定するためのプロパティファイルの例です。主に以下の部分が含まれます:

    1. データソースのエイリアスを TEST に設定します。

      コード:

      jdbc-1.proxool.alias=TEST
      
    2. データベース接続パラメータを設定します。

      1. ドライバーのクラス名を設定します。ここでは、OceanBase JDBCドライバーのクラス名 com.oceanbase.jdbc.Driver です。
      2. データベース接続のURLを設定します。ホストIP、ポート番号、アクセスするスキーマを含みます。
      3. データベースのユーザー名を設定します。
      4. データベースのパスワードを設定します。

      コード:

      jdbc-1.proxool.driver-class=com.oceanbase.jdbc.Driver
      jdbc-1.proxool.driver-url=jdbc:oceanbase://$host:$port/$schema_name
      jdbc-1.user=$user_name
      jdbc-1.password=$password
      

      パラメータの説明:

      • $host:接続文字列から -h パラメータを取得したもので、OB Cloudクラウドデータベースの接続アドレスです。
      • $port:接続文字列から -P パラメータを取得したもので、OB Cloudクラウドデータベースの接続ポートです。
      • $schema_name:接続文字列から -D パラメータを取得したもので、アクセスするデータベースの名前です。
      • $user_name:接続文字列から -u パラメータを取得したもので、アカウント名です。
      • $password:接続文字列から -p パラメータを取得したもので、アカウントのパスワードです。
    3. その他のProxool接続プールのパラメータを設定します。

      1. 接続プールの最大接続数を8に設定します。
      2. 接続プールの最小接続数を5に設定します。
      3. 接続プールで利用可能な接続数を4に設定します。
      4. 接続プールの詳細モードを有効に設定します。これにより、より多くのログ情報が表示されます。
      5. 接続プールの統計情報記録間隔を10秒、1分、1日に設定します。
      6. 接続プール統計情報記録のログレベルをエラーレベルに設定します。

      コード:

      jdbc-1.proxool.maximum-connection-count=8
      jdbc-1.proxool.minimum-connection-count=5
      jdbc-1.proxool.prototype-count=4
      jdbc-1.proxool.verbose=true
      jdbc-1.proxool.statistics=10s,1m,1d
      jdbc-1.proxool.statistics-log-level=error
      

    注意

    具体的なプロパティ(パラメータ)の設定は、プロジェクトの要件とデータベースの特性によって異なります。実際の状況に応じて調整および設定を行うことを推奨します。Proxool接続プールパラメータの詳細については、Propertiesを参照してください。

    よく使われる設定パラメータの説明:

    パラメータ
    デフォルト値
    説明
    alias N/A 接続プールのエイリアスを設定します。接続プールを識別するために使用でき、複数の接続プールが存在する場合に役立ちます。
    driver-class N/A データベースドライバーのクラス名を設定します。
    driver-url N/A データベース接続URLを設定します。ホストIPアドレス、ポート番号、アクセスするスキーマ、およびオプションのデータベースドライバーパラメータを含みます。
    username N/A データベースのユーザー名を設定します。
    password N/A データベースのパスワードを設定します。
    maximum-connection-count 15 接続プールの最大接続数を設定します。デフォルト値は15で、接続プールが作成できる接続の最大数は15であることを意味します。
    minimum-connection-count 5 接続プールの最小接続数を設定します。デフォルト値は5で、接続プールが常に少なくとも5つの接続を保持することを意味します。
    prototype-count 0 接続プールのプロトタイプ接続数を設定します。デフォルト値は0で、接続プールが追加の接続を自動的に作成しないことを意味します。
    verbose false 接続プールの詳細出力モードを設定します。デフォルト値はfalse、つまりサイレントモードです。
    verbose プロパティを true に設定すると、接続プールは開発者のデバッグや監視を容易にするために、より詳細な情報を出力します。この情報には、接続プールの状態、接続の作成と解放、接続の使用状況などが含まれる可能性があります。
    verbose モードを有効にすると、開発者は接続プールの動作状況をより深く理解し、接続の割り当てと回収が正常に行われているか確認できます。これは、接続リーク、パフォーマンス問題、チューニングのトラブルシューティングに非常に役立ちます。
    本番環境では、通常 verbose を true に設定することは推奨されません。大量の出力情報が生成され、システムのパフォーマンスやログファイルのサイズに影響を与える可能性があるためです。一般的に、verbose を false に設定し、必要に応じて一時的にデバッグや監視のために有効にすることを推奨します。
    statistics null 統計情報のサンプリング間隔、すなわち接続プールの使用状況統計を設定します。サンプリング間隔はカンマ区切りの時間単位で設定できます。例えば、10s,15m は10秒ごとと15分ごとにサンプリングすることを意味します。利用可能な単位は s(秒)、m(分)、h(時間)、d(日)です。デフォルト値は null で、統計情報を収集しないことを意味します。
    statistics プロパティを設定すると、接続プールはアクティブ接続数、アイドル接続数、接続リクエスト数などの統計情報を定期的にサンプリングします。サンプリング間隔は統計情報の粒度とサンプリング頻度を決定します。
    statistics-log-level null 統計情報のログレベル、すなわちログ統計の追跡タイプを設定します。選択可能なログレベルは DEBUG、INFO、WARN、ERROR、FATAL です。デフォルト値は null で、統計情報ログを記録しないことを意味します。
    statistics-log-level プロパティを設定すると、接続プールは生成された統計情報を指定されたログレベルで記録します。これらの統計情報には、接続プールの状態、接続の作成と解放、接続の使用状況などが含まれる可能性があります。
    test-after-use N/A 接続が閉じられた後にテストを実行するかどうかを設定します。このプロパティを true に設定し、house-keeping-test-sql プロパティを定義している場合、各接続は閉じられた後(つまり接続プールに返却された後)にテストされます。接続テストに失敗した場合、その接続は破棄されます。
    接続プール内の接続は、使用後は通常接続プールに戻され、再利用されます。test-after-use プロパティの役割は、接続が接続プールに戻された後、その接続の可用性と有効性を確認するためにテストを実行することです。接続テストでは通常、house-keeping-test-sql プロパティで指定されたSQLステートメントが使用されます。
    test-after-use 機能を有効にすることで、接続プールは使用不能な接続を迅速に検出し、接続プールから削除することができます。これにより、アプリケーションが無効な接続を取得するのを防ぎ、アプリケーションの安定性と信頼性を向上させることができます。
    test-after-use 機能を使用するには、house-keeping-test-sql プロパティを事前に設定する必要がある点に注意してください。このプロパティは、接続テストで使用するSQLステートメントを定義するために使用されます。これにより、接続プールは house-keeping-test-sql で定義されたルールに基づいて接続をテストし、判断することができます。
    house-keeping-test-sql N/A 接続プール内のアイドル接続をテストするSQLステートメントを設定します。接続プールのハウスキーピングスレッドがアイドル接続を検出すると、このSQLステートメントを使用してそれらの接続をテストします。テスト用SQLステートメントは、現在日時を確認するなど、非常に高速に実行されるものである必要があります。このプロパティが定義されていない場合、接続テストは実行されません。MySQLモードでは SELECT CURRENT_DATE または SELECT 1 を使用できます。Oracleモードでは SELECT sysdate FROM DUAL または SELECT 1 FROM DUAL を使用できます。
    trace false 各SQL呼び出しのログ情報を記録するかどうかを設定します。true に設定すると、各SQL呼び出しがログに記録され(DEBUG レベル)、実行時間が表示されます。ConnectionListener(ProxoolFacade を参照)を登録することでもこの情報を取得できます。デフォルト値は false です。
    trace 機能を有効にすると、特に高並行性や頻繁なSQL呼び出しの環境では、大量のログ出力が発生する可能性があります。本番環境では、過剰なログ生成やシステム性能への不要な影響を避けるため、慎重に使用することを推奨します。
    maximum-connection-lifetime 4時間 接続の最大ライフタイムを設定します。つまり、接続が破棄されるまでに存在できる最長時間(ミリ秒単位)です。デフォルト値は4時間です。
    接続のライフタイムとは、接続が作成されてから破棄されるまでの期間を指します。maximum-connection-lifetime プロパティを設定することで、接続が接続プール内に存在できる最長時間を制限し、接続が長時間使用されない状態やリソースリークが発生するのを防ぐことができます。
    maximum-active-time 5分 スレッドの最大アクティブ時間を設定します。接続プールのハウスキーピングスレッドが、あるスレッドのアクティブ時間がこの設定値を超えたことを検出すると、そのスレッドを終了させます。そのため、このプロパティは想定される最遅応答時間より大きい値に設定してください。デフォルト値は5分です。
    デーモンは、接続プール内の余分な利用可能スレッド(未使用で、この時間を超えたもの)を終了させ、最終的に保持される接続数は minimum-connection-count で指定された数になります。デーモンは house-keeping-sleep-time パラメータで設定された間隔で定期的にチェックを行います。
    maximum-new-connections N/A 接続プールが一度に同時に確立できる最大新規接続数を設定します。このプロパティは非推奨(Deprecated)です。代わりに simultaneous-build-throttle プロパティの使用を推奨します。
    simultaneous-build-throttle 10 接続プールが任意の時点で同時に確立できる最大接続数を設定します。つまり、確立されようとしているがまだ利用できない新規接続数の上限です。接続の確立には複数のスレッドが使用される場合があり(例:オンデマンドで接続を確立する場合)、接続の確立を決定してから接続が利用可能になるまでには一定の時間がかかるため、多数のスレッドが同時に接続確立を決定するのを防ぐ仕組みが必要です。
    simultaneous-build-throttle プロパティは、接続プールが同時に確立する新規接続数を制限し、接続プールの並行性を制御する役割を果たします。最大同時接続数に達すると、新規接続を要求するスレッドは、利用可能な接続が出現するか、指定されたタイムアウト時間を超えるまでブロックされます。
    適切な simultaneous-build-throttle プロパティを設定することで、接続プールの並行性とリソース消費のバランスを取ることができます。デフォルト値は10で、接続プールが同時に確立できる最大接続数は10を意味します。
    overload-without-refusal-lifetime 60 接続プールの状態を判断するために使用されます。指定された時間しきい値(ミリ秒単位)内に接続リクエストが拒否された場合、接続プールは過負荷状態にあることを示します。デフォルト値は60秒です。
    test-before-use N/A 接続を提供する前に各接続をテストするかどうかを設定します。このプロパティを true に設定すると、アプリケーションに接続を提供する前に、各接続は事前に定義されたテストSQL(house-keeping-test-sql プロパティで定義)を実行してテストされます。接続テストに失敗した場合、その接続は破棄され、接続プールは別の利用可能な接続を選択します。すべての接続がテストに失敗した場合、新しい接続が作成されます。新しい接続のテストも失敗した場合、SQLException がスローされます。
    注意点として、MySQLデータベースでは、接続パラメータに autoReconnect=true パラメータを追加する必要があります。そうしないと、test-before-use パラメータを有効にしても再接続できません。
    fatal-sql-exception null SQL例外の検出と処理を設定します。これはカンマ区切りのメッセージフラグメントのリストです。SQLException が発生すると、そのメッセージがこれらのメッセージフラグメントと比較されます。いずれかのメッセージフラグメント(大文字小文字を区別)を含む場合、致命的なSQL例外と見なされ、接続は破棄されます。いずれにせよ、例外は再スローされ、ユーザーが何が起こったかを理解できるようになります。異なる例外をスローするように設定することもできます(fatal-sql-exception-wrapper-class プロパティを参照)。デフォルト値は null です。
    fatal-sql-exception-wrapper-class プロパティを設定した場合、スローされる代替の例外クラスを構成できる点に注意してください。これにより、SQL例外を処理する方法をカスタマイズできます。
    fatal-sql-exception-wrapper-class null 致命的なSQL例外の例外ラッピングを設定します。fatal-sql-exception プロパティが設定されている場合、デフォルトの動作は致命的な SQLException を引き起こした例外を破棄し、元の例外をユーザーに直接スローすることです。このプロパティを使用すると、SQLException を別の例外でラッピングできます。この例外は、SQLException または RuntimeException から継承されている限り、任意のクラスにすることができます。Proxoolは、例外クラスを自分で構築したくない場合に使用できる2つのクラスを提供しています:FatalSQLException と FatalRuntimeException。これらのクラスを使用するには、必要に応じてこのプロパティを org.logicalcobwebs.proxool.FatalSQLException または org.logicalcobwebs.proxool.FatalRuntimeException に設定する必要があります。デフォルト値は null で、致命的な SQLException をラッピングしないことを意味します。デフォルト値は null です。
    例外ラッピングクラスは、SQLException または RuntimeException のサブクラスである必要があります。
    house-keeping-sleep-time 30秒 接続プールのハウスキーピングスレッド(house keeping thread)のスリープ時間を設定します。ハウスキーピングスレッドは、すべての接続の状態をチェックし、接続を破棄または作成する必要があるかどうかを判断します。デフォルト値は30秒で、ハウスキーピングスレッドが30秒ごとにメンテナンスタスクを実行することを意味します。
    injectable-connection-interface N/A Proxoolが委譲されたConnectionオブジェクトで定義されたメソッドを実装できるようにするために使用されます。
    injectable-statement-interface N/A Proxoolが委譲されたStatementオブジェクトで定義されたメソッドを実装できるようにするために使用されます。
    injectable-prepared-statement-interface N/A Proxoolが委譲されたPreparedStatementオブジェクトで定義されたメソッドを実装できるようにするために使用されます。
    injectable-callable-statement-interface N/A Proxoolが委譲されたCallableStatementオブジェクトで定義されたメソッドを実装できるようにするために使用されます。
    jndi-name N/A 接続プールがJNDI (Java Naming and Directory Interface) に登録する名前を指定するために使用されます。

    Main.javaコードの紹介

    Main.java ファイルはサンプルプログラムの一部であり、Proxool接続プールを使用してデータベース接続を取得し、テーブルの作成、データの挿入、削除、更新、クエリといった一連のデータベース操作を実行し、その結果を出力する方法を示しています。

    本記事の Main.java ファイルのコードは、主に以下の部分で構成されています:

    1. 必要なクラスとインターフェースのインポート。

      コードが存在するパッケージを定義し、ProxoolおよびJDBC関連のクラスをインポートします。これらのクラスは、データベース接続プールの設定と管理、およびSQLステートメントの実行に使用されます。Proxool接続プールを使用することで、データベース操作のパフォーマンスと信頼性を向上させることができます。具体的な手順は以下の通りです:

      1. コードが存在するパッケージを com.example と定義します。このパッケージは現在のJavaクラスを格納するために使用されます。
      2. Proxoolの設定クラス org.logicalcobwebs.proxool.configuration.PropertyConfigurator をインポートします。
      3. 設定ファイルを読み取るための入力ストリームクラス java.io.InputStream をインポートします。
      4. JDBCのConnectionクラス java.sql.Connection をインポートします。
      5. JDBCのDriverManagerクラス java.sql.DriverManager をインポートします。
      6. JDBCのResultSetクラス java.sql.ResultSet をインポートします。
      7. JDBCのStatementクラス java.sql.Statement をインポートします。
      8. 設定ファイルを読み込むためのPropertiesクラス java.util.Properties をインポートします。

      コード:

      package com.example;
      
      import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;
      import java.io.InputStream;
      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.ResultSet;
      import java.sql.Statement;
      import java.util.Properties;
      
    2. クラス名とメソッドの定義。

      Javaプログラムのエントリーメソッドを定義します。このメソッドでは、設定ファイルからデータベース接続情報を取得し、Proxoolドライバを使用してデータベース接続を確立した後、定義済みのメソッドを順次呼び出してDDLステートメント、DMLステートメント、クエリステートメントを実行します。発生する可能性のある例外情報をキャッチして出力します。このコードの目的は、データベース関連の操作を実行し、ログレコーダーを使用してログを記録することです。具体的な手順は以下の通りです:

      1. Mainという名前のpublicクラスを定義します。

      2. データベース設定(プロパティ)ファイルのパスを表す、DB_PROPERTIES_FILE という名前のプライベート静的定数を定義します。この定数はコード内で参照することができ、プロパティファイルのロードと読み取りに使用されます。

      3. プログラムの実行開始点として、public staticメソッド main を定義します。

        1. 例外が発生する可能性のあるコードブロックをキャッチします。

          1. 設定ファイルのプロパティを読み取るために使用される Properties オブジェクトを作成します。
          2. Mainクラスのクラスローダーを使用して、設定ファイルの入力ストリームを取得します。
          3. ロードされた入力ストリームを使用して設定ファイルをロードし、プロパティを Properties オブジェクトにロードします。
          4. ロードされたプロパティを使用して接続プールを設定します。
          5. Proxoolデータベースドライバを動的にロードします。
          6. Proxoolドライバを使用してデータベース接続を確立します。
          7. Statement オブジェクトを作成します。
          8. DDLステートメントを実行するために定義済みのメソッド executeDDLStatements() を呼び出します。これはテーブルを作成する操作です。
          9. DMLステートメントを実行するために定義済みのメソッド executeDMLStatements() を呼び出します。これはデータの挿入、更新、削除を行う操作です。
          10. クエリステートメントを実行してデータを取得するために、定義済みのメソッド executeQueryStatements() を呼び出します。
        2. 発生する可能性のある例外情報をキャッチして出力します。

      4. テーブルの作成、DMLステートメントの実行、データのクエリを行うためのメソッドを定義します。

      コード:

      public class Main {
          private static final String DB_PROPERTIES_FILE = "/db.properties";
      
          public static void main(String[] args) {
              try {
                  Properties properties = new Properties();
                  InputStream is = Main.class.getResourceAsStream(DB_PROPERTIES_FILE);
                  properties.load(is);
                  PropertyConfigurator.configure(properties);
      
                  Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
                  try (Connection conn = DriverManager.getConnection("proxool.TEST");
                      Statement stmt = conn.createStatement()) {
                      executeDDLStatements(stmt);
                      executeDMLStatements(stmt);
                      executeQueryStatements(stmt);
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      
          // テーブルを作成するためのメソッドを定義する
          // DMLステートメントを実行するためのメソッドを定義する
          // データをクエリするためのメソッドを定義する
      }
      
    3. テーブルを作成するためのメソッドを定義します。

      プライベート静的メソッド executeDDLStatements() を定義します。これは、テーブル作成ステートメントを含むDDL(データ定義言語)ステートメントを実行するために使用されます。具体的な手順は以下の通りです:

      1. プライベート静的メソッド executeDDLStatements() を定義します。このメソッドは Statement オブジェクトをパラメータとして受け取り、Exception 例外をスローする可能性があります。
      2. execute() メソッドを使用してSQLステートメントを実行し、test_proxool という名前のテーブルを作成します。このテーブルには、それぞれ NUMBER 型と VARCHAR2(32) 型の c1 と c2 の2列があります。

      コード:

          private static void executeDDLStatements(Statement stmt) throws Exception {
              stmt.execute("CREATE TABLE test_proxool (c1 NUMBER, c2 VARCHAR2(32))");
          }
      
    4. DMLステートメントを実行するためのメソッドを定義します。

      プライベート静的メソッド executeDMLStatements() を定義します。これは、データの挿入、削除、更新を行うDML(データ操作言語)ステートメントを実行するために使用されます。具体的な手順は以下の通りです:

      1. プライベート静的メソッド executeDMLStatements() を定義します。このメソッドは Statement オブジェクトをパラメータとして受け取り、実行中に例外が発生した場合、メソッドは Exception 例外をスローします。
      2. for ループを使用して、1から10まで反復します。ループ内で、execute() メソッドを使用してSQL挿入ステートメントを実行し、変数 i と関連する文字列値を test_proxool テーブルに挿入します。
      3. SQL削除ステートメントを実行し、test_proxool テーブルから c1 列の値が5以下の行を削除します。
      4. SQL更新ステートメントを実行し、test_proxool テーブルの c1 列の値が6の行の c2 列を test_update に更新します。

      コード:

          private static void executeDMLStatements(Statement stmt) throws Exception {
              for (int i = 1; i <= 10; i++) {
                  stmt.execute("INSERT INTO test_proxool VALUES (" + i + ",'test_insert" + i + "')");
              }
              stmt.execute("DELETE FROM test_proxool WHERE c1 <= 5");
              stmt.execute("UPDATE test_proxool SET c2 = 'test_update' WHERE c1 = 6");
          }
      
    5. データをクエリするためのメソッドを定義します。

      プライベート静的メソッド executeQueryStatements() を定義します。これは SELECT クエリステートメントを実行し、結果を処理するために使用されます。具体的な手順は以下の通りです:

      1. プライベート静的メソッド executeQueryStatements() を定義します。このメソッドは Statement オブジェクトをパラメータとして受け取り、実行中に例外が発生した場合、メソッドは Exception 例外をスローします。
      2. executeQuery() メソッドを使用して SELECT クエリステートメントを実行し、結果を ResultSet オブジェクト rs に格納します。ここでは、クエリが test_proxool テーブルのすべてのデータを返します。try-with-resources ステートメントを使用して、ResultSet の使用後に自動的に閉じられるようにします。
      3. while ループと next() メソッドを使用して、ResultSet オブジェクト rs の各行データを反復処理します。各反復で、rs.next() メソッドはポインタを結果セットの次の行に移動します。次の行のデータが利用可能な場合、このメソッドは true を返し、そうでない場合は false を返します。while ループ内では、rs.next() が true を返す限り、まだ利用可能な行データがあることを意味します。ループ体のコードが実行され、現在の行のデータが処理されます。すべての行のデータが処理された後、rs.next() は false を返し、ループが終了します。
      4. getInt() と getString() メソッドを使用して、現在の行の指定された列名の値を取得し、コンソールに出力します。ここでは、c1 列と c2 列の値が出力されます。getInt() メソッドは整数値を取得するために使用され、getString() メソッドは文字列値を取得するために使用されます。

      コード:

          private static void executeQueryStatements(Statement stmt) throws Exception {
              try (ResultSet rs = stmt.executeQuery("SELECT * FROM test_proxool")) {
                  while (rs.next()) {
                      System.out.println(rs.getInt("c1") + "   " + rs.getString("c2"));
                  }
              }
          }
      

    全コード表示

    pom.xml
    db.properties
    Main.java
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.oceanbase</groupId>
        <artifactId>proxool-oceanbase-client</artifactId>
        <version>1.0-SNAPSHOT</version>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>8</source>
                        <target>8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
        <dependencies>
            <dependency>
                <groupId>com.oceanbase</groupId>
                <artifactId>oceanbase-client</artifactId>
                <version>2.4.2</version>
            </dependency>
            <dependency>
                <groupId>proxool</groupId>
                <artifactId>proxool-cglib</artifactId>
                <version>0.9.1</version>
            </dependency>
            <dependency>
                <groupId>proxool</groupId>
                <artifactId>proxool</artifactId>
                <version>0.9.1</version>
            </dependency>
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>
        </dependencies>
    </project>
    
    #alias: the alias of the data source
    jdbc-1.proxool.alias=TEST
    #driver-class: driver name
    jdbc-1.proxool.driver-class=com.oceanbase.jdbc.Driver
    #driver-url: url connection string, username and password must be determined
    jdbc-1.proxool.driver-url=jdbc:oceanbase://$host:$port/$schema_name
    jdbc-1.user=$user_name
    jdbc-1.password=$password
    #The maximum number of database connections. The default is 15
    jdbc-1.proxool.maximum-connection-count=8
    #The minimum number of database connections, defaults to 5
    jdbc-1.proxool.minimum-connection-count=5
    #The number of available connections in the Connection pool. If the number of connections in the current Connection pool is less than this value, new connections will be established (assuming that the maximum number of available connections is not exceeded). For example, if we have three active connections and two available connections, and our prototype count is 4, the database Connection pool will try to establish another two connections. This is different from the minimum connection count Minimum connection count also counts active connections. Prototype count is the number of spare connections
    jdbc-1.proxool.prototype-count=4
    #verbose: detailed information settings. Parameter bool value
    jdbc-1.proxool.verbose=true
    #statistics: connection pool usage statistics. Parameter "10s, 1m, 1d"
    jdbc-1.proxool.statistics=10s,1m,1d
    #statistics-log-level:  log statistics tracking type. Parameter 'ERROR' or 'INFO'
    jdbc-1.proxool.statistics-log-level=error
    
    package com.example;
    
    import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class Main {
        private static final String DB_PROPERTIES_FILE = "/db.properties";
    
        public static void main(String[] args) {
            try {
                Properties properties = new Properties();
                InputStream is = Main.class.getResourceAsStream(DB_PROPERTIES_FILE);
                properties.load(is);
                PropertyConfigurator.configure(properties);
    
                Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
                try (Connection conn = DriverManager.getConnection("proxool.TEST");
                    Statement stmt = conn.createStatement()) {
                    executeDDLStatements(stmt);
                    executeDMLStatements(stmt);
                    executeQueryStatements(stmt);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private static void executeDDLStatements(Statement stmt) throws Exception {
            stmt.execute("CREATE TABLE test_proxool (c1 NUMBER, c2 VARCHAR2(32))");
        }
    
        private static void executeDMLStatements(Statement stmt) throws Exception {
            for (int i = 1; i <= 10; i++) {
                stmt.execute("INSERT INTO test_proxool VALUES ("+ i +",'test_insert" + i + "')");
            }
            stmt.execute("DELETE FROM test_proxool WHERE c1 <= 5");
            stmt.execute("UPDATE test_proxool SET c2 = 'test_update' WHERE c1 = 6");
        }
    
        private static void executeQueryStatements(Statement stmt) throws Exception {
            try (ResultSet rs = stmt.executeQuery("SELECT * FROM test_proxool")) {
                while (rs.next()) {
                    System.out.println(rs.getInt("c1") + "   " + rs.getString("c2"));
                }
            }
        }
    }
    

    関連ドキュメント

    • OceanBase Connector/Jの詳細については、OceanBase JDBCドライバを参照してください。
    • Proxool接続プールの詳細については、Introduction for Usersを参照してください。

    前のトピック

    C3P0接続プールを使用したOB Cloudデータベース接続サンプルプログラム
    最後

    次のトピック

    HikariCP接続プールを使用したOB Cloudデータベース接続サンプルプログラム
    次
    このページの内容
    前提条件
    手順
    ステップ1:proxool-oceanbase-clientプロジェクトをIntelliJ IDEAにインポートする
    ステップ2:proxool-oceanbase-clientプロジェクトのデータベース接続情報を修正する
    ステップ3:proxool-oceanbase-clientプロジェクトを実行する
    プロジェクトコードについて
    pom.xmlコードの紹介
    db.propertiesコードの紹介
    Main.javaコードの紹介
    全コード表示
    関連ドキュメント