OceanBase logo

OceanBase

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

デプロイを自由に

OceanBase Cloud

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

エンタープライズ版

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

オープンソース版を試す

コミュニティ版

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

OceanBase seekdb

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

顧客事例

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

さらに見る
利用シーン別

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

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

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

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

複数インスタンスの統合

ドキュメント

会社概要

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

OceanBaseについて

法的情報

お問い合わせ

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

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

デプロイを自由に

OceanBase Cloud

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

エンタープライズ版

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

オープンソース版を試す

コミュニティ版

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

OceanBase seekdb

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

顧客事例

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

さらに見る
利用シーン別

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

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

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

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

複数インスタンスの統合

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

OceanBaseについて

法的情報

お問い合わせ

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

OceanBaseデータベース

V4.3.5

    OceanBase logo

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

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

    © OceanBase 2026. All rights reserved

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

    Proxool

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

    折りたたみ

    シェア

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

    proxool-mysql-clientのサンプルプロジェクトをダウンロード

    前提条件

    • OceanBaseデータベースがインストール済みで、MySQLモードのテナントが作成されていること。

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

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

      説明

      この記事でコードの実行にはIntelliJ IDEA 2021.3.2 (Community Edition)を使用しています。ご自身の好みに合わせて、適切なツールを選択してサンプルコードを実行することも可能です。

    操作手順

    説明

    本記事の操作手順は、Windows環境でIntelliJ IDEA Community Edition 2021.3.2を使用して本プロジェクトをコンパイルおよび実行する方法です。

    1. proxool-mysql-clientプロジェクトをIntelliJ IDEAにインポートします。
    2. OceanBaseデータベースのURLを取得します。
    3. proxool-mysql-clientプロジェクトのデータベース接続情報を修正します。
    4. proxool-mysql-clientプロジェクトを実行します。

    ステップ1:proxool-mysql-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-mysql-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:OceanBaseデータベース接続情報を取得する

    1. OceanBaseデータベースのデプロイ担当者または管理者から、該当するデータベース接続文字列を取得します。

      例:

      obclient -hxxx.xxx.xxx.xxx -P2881 -utest_user001@mysql001 -p****** -Dtest -A
      

      その他の接続文字列に関する詳細は、OBClientを使用したOceanBaseテナントへの接続を参照してください。

    2. OceanBaseデータベース接続文字列の情報に基づいて、以下のURLの対応する情報を入力します。

      jdbc:mysql://$host:$port/$database_name?user=$user_name&password=$password
      

      パラメータの説明:

      • $host:OceanBaseデータベースへの接続IPアドレス。OceanBaseデータベースプロキシ(OceanBase Database Proxy、ODP)接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。

      • $port:OceanBaseデータベースへの接続ポート。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。

      • $database_name:アクセス対象のデータベース名。

        注意

        テナントに接続するユーザーは、データベースに対するCREATE、INSERT、DELETE、UPDATE、およびSELECT権限が付与されていなければなりません。その他のユーザー権限の詳細については、MySQLモードの権限分類を参照してください。

      • user_name:テナントの接続アカウント。ODP接続方式の一般的な形式は2種類あります:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。

      • password:アカウントのパスワード。

      MySQL Connector/Jの接続プロパティの詳細については、Configuration Propertiesを参照してください。

      例:

      jdbc:mysql://xxx.xxx.xxx.xxx:2881/test?user=test_user001@mysql001&password=******
      

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

    ステップ2:OceanBaseデータベースのURLを取得するで取得した情報に基づいて、ファイルproxool-mysql-client/src/main/resources/db.propertiesのデータベース接続情報を修正します。

    例:

    • OBServerノードのIPアドレスはxxx.xxx.xxx.xxxです。
    • アクセスポートは2881を使用します。
    • アクセスするデータベース名はtestです。
    • テナントの接続アカウントはtest_user001@mysql001です。test_user001がユーザー名、mysql001がテナント名を表します。このmysql001は、OceanBaseデータベース上にMySQLモードで作成されたテナントです。
    • パスワードは******です。

    コード:

    ...
    jdbc-1.proxool.driver-url=jdbc:mysql://xxx.xxx.xxx.xxx:2881/test?useSSL=false
    jdbc-1.user=test_user@mysql001
    jdbc-1.password=******
    ...
    

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

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

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

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

      4

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

      obclient [(none)]>SELECT * FROM test.test_proxool;
      

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

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

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

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

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

    proxool-mysql-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-mysql-clientと指定します。
      3. <version>で、プロジェクトのバージョン番号を1.0-SNAPSHOTと指定します。

      コード:

          <groupId>com.example</groupId>
          <artifactId>proxool-mysql-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. プロジェクトが依存するコンポーネントを設定します。

      <dependency>タグを使い、依存関係を定義します。

      1. mysql-connector-javaライブラリを追加し、データベースへの接続と操作に使用します:

        1. <groupId>: mysql
        2. <artifactId>: mysql-connector-java
        3. <version>: 5.1.47

        コード:

                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.47</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. ommons-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. ドライバーのクラス名を設定します。ここでは、MySQL JDBCドライバーのクラス名com.mysql.jdbc.Driverを使用します。
      2. データベース接続のURLを設定します。これには、ホストIPアドレス、ポート番号、アクセスする必要があるデータベース、および追加の接続プロパティが含まれます。
      3. データベースのユーザー名を設定します。
      4. データベースのパスワードを設定します。

      コード:

      jdbc-1.proxool.driver-class=com.mysql.jdbc.Driver
      jdbc-1.proxool.driver-url=jdbc:mysql://$host:$port/$database_name?useSSL=false
      jdbc-1.user=$user_name
      jdbc-1.password=$password
      

      パラメータの説明:

      • $host:OceanBaseデータベースへの接続IPアドレス。ODP接続方式ではODPアドレスを使用し、直接接続方式ではOBServerノードのIPアドレスを使用します。
      • $port:OceanBaseデータベースへの接続ポートを提供します。ODP接続方式のデフォルトポートは2883で、ODPデプロイ時にカスタマイズ可能です。直接接続方式のデフォルトポートは2881で、OceanBaseデータベースのデプロイ時にカスタマイズ可能です。
      • $database_name:アクセス対象のデータベース名。
      • $user_name:テナントの接続アカウント。ODP接続の一般的な形式:ユーザー名@テナント名#クラスタ名またはクラスタ名:テナント名:ユーザー名。直接接続方式の形式:ユーザー名@テナント名。
      • $password:アカウントのパスワード。
    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 接続プールのエイリアスを設定するために使用されます。1つの接続プールを識別するために使用できます。複数の接続プールが存在する場合に役立ちます。
    driver-class N/A データベースドライバーのクラス名を設定するために使用されます。
    driver-url N/A データベース接続URLを設定するために使用されます。これには、ホストIPアドレス、ポート番号、アクセスする必要があるSchema、およびオプションのデータベースドライバーのパラメータが含まれます。
    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クラスを定義しました。

        1. DB_PROPERTIES_FILEという名前のプライベート静的定数を定義しました。データベース設定(プロパティ)ファイルのパスを示します。この定数は、コード内でインポートすることでき、プロパティファイルのロードと読み込みに使用できます。

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

          1. 例外が発生する可能性のあるコードブロックをキャッチするために使用されます。

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

      2. テーブルを作成するためのメソッドが定義されています。

      コード:

      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という名前のテーブルを作成します。このテーブルには、c1とc2の2つの列があり、それぞれINTタイプとVARCHAR(32)タイプになります。

      コード:

          private static void executeDDLStatements(Statement stmt) throws Exception {
              stmt.execute("CREATE TABLE test_proxool (c1 INT, c2 VARCHAR(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-mysql-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>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</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.mysql.jdbc.Driver
    #driver-url: url connection string, username and password must be determined
    jdbc-1.proxool.driver-url=jdbc:mysql://$host:$port/$database_name?useSSL=false
    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 INT, c2 VARCHAR(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"));
                }
            }
        }
    }
    

    関連ドキュメント

    • MySQL Connector/Jの詳細については、Overview of MySQL Connector/Jを参照してください。
    • Proxool接続プールを使用する方法の詳細については、Introduction for Usersを参照してください。

    前のトピック

    C3P0接続プールによるOceanBaseデータベースへの接続サンプルプログラム
    最後

    次のトピック

    HikariCP
    次
    このページの内容
    前提条件
    操作手順
    ステップ1:proxool-mysql-clientプロジェクトをIntelliJ IDEAにインポートする
    ステップ2:OceanBaseデータベース接続情報を取得する
    ステップ3:proxool-mysql-clientプロジェクトのデータベース接続情報を修正する
    ステップ4:proxool-mysql-clientプロジェクトを実行する
    プロジェクトコードについて
    pom.xmlコードの紹介
    db.propertiesコードの紹介
    Main.javaコードの紹介
    全コード表示
    関連ドキュメント