Druid は、データベースへの接続に使用される Java Database Connectivity (JDBC) 接続プールです。このトピックでは、Druid を使用して LindormTable に接続し、使用する方法について説明します。
前提条件
Java Development Kit (JDK) V1.8 以降がインストールされている。
Lindorm インスタンスのホワイトリストが構成されている。詳細については、「ホワイトリストを構成する」をご参照ください。
LindormTable のバージョンが 2.3.1 以降である。LindormTable のバージョンをアップグレードする方法の詳細については、「Lindorm インスタンスのマイナーエンジンバージョンをアップグレードする」をご参照ください。
準備
Druid を使用して LindormTable に接続する前に、Druid と Lindorm JDBC ドライバーをインストールする必要があります。たとえば、Maven プロジェクトの pom.xml ファイルに次の依存関係を追加できます。
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.1.3</version> </dependency>
druid-spring-boot-starter を使用して Druid を起動する場合、最初に druid-spring-boot-starter が依存する druid コンポーネントを除外し、druid コンポーネントへの依存関係を構成ファイルに明示的に追加する必要があります。次の例は、druid-spring-boot-starter を使用して Druid を起動する場合の依存関係の構成方法を示しています。
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.11</version> <exclusions> <exclusion> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.11</version> </dependency> <dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.1.3</version> </dependency>
手順
サンプルコード をダウンロードし、ローカルコンピュータで直接コンパイルして実行するか、サンプルコードに基づいて独自のプロジェクトを開発できます。
Druid のパラメータを構成します。Maven プロジェクトの
src/main/resources
パスに、druid.properties
ファイルを作成し、次の構成をファイルに追加します。# ドライバークラスの名前を指定します。この構成は変更せずに使用できます。 driverClassName=com.aliyun.lindorm.table.client.Driver # url、username、password パラメータを実際の値に置き換えることができます。これらのパラメータの値は、Lindorm コンソールで取得できます。 url=jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****.lindorm.rds.aliyuncs.com:30060 username=**** password=**** # **** を接続するデータベースに置き換えます。 connectionProperties=database=**** # 接続プールを初期化して接続を作成します。この構成は変更せずに使用することをお勧めします。 init=true # 初期化中に作成する接続数を指定します。このパラメータは、要件に基づいて構成できます。 initialSize=10 # 接続プール内のアイドル接続数を指定します。このパラメータは、要件に基づいて構成できます。高パフォーマンスのシナリオでは、このパラメータを maxActive と同じ値に設定します。ビジネスの変動が大きい場合は、このパラメータを小さい値に設定します。 minIdle=40 # 接続プール内のアイドル接続の最大数を指定します。このパラメータは、要件に基づいて構成できます。このパラメータは、スレッドプールサイズと同じ値に設定することをお勧めします。 maxActive=40 # クライアントが接続を取得するために待機できる最大時間を指定します。単位:ミリ秒。この構成は変更せずに使用することをお勧めします。 maxWait=30000 # 同じ接続を長時間使用することによって発生するサーバー側の負荷の不均衡を防ぐために、接続ごとの最大使用回数を指定します。これは、パフォーマンスにわずかな影響を与える可能性があります。 phyMaxUseCount=30000 # 接続キープアライブに関連するパラメータを構成します。これらの構成は変更せずに使用することをお勧めします。変更すると、接続が予期せず切断される可能性があります。 # この場合、ConnectionDisconnectedException 例外が報告されます。 druid.keepAlive=true druid.keepAliveBetweenTimeMillis=30000 minEvictableIdleTimeMillis=600000 maxEvictableIdleTimeMillis=900000 timeBetweenEvictionRunsMillis=5000 # 接続の検証に必要なパラメータを構成します。これらの構成は変更せずに使用することをお勧めします。 validationQuery=SELECT 1 testWhileIdle=true testOnBorrow=false testOnReturn=false # キャッシュに関連するパラメータを構成します。この例では、キャッシュは無効になっています。これらの構成は変更せずに使用することをお勧めします。 # 変更すると、NoSuchStatement 例外が報告される可能性があります。 poolPreparedStatements=false maxOpenPreparedStatements=-1 druid.maxPoolPreparedStatementPerConnectionSize=-1
説明実際に使用する場合は、次のパラメータの値を調整または置き換えます。
url
: LindormTable への接続に使用するエンドポイント。エンドポイントの取得方法の詳細については、「エンドポイントを取得する」をご参照ください。username
: LindormTable へのアクセスに使用するユーザー名。ユーザー名は、LindormTable のクラスタ管理システムで表示できます。詳細については、「ユーザーの管理」をご参照ください。password
: LindormTable へのアクセスに使用するパスワード。パスワードを忘れた場合は、LindormTable のクラスタ管理システムでパスワードを変更できます。パスワードの変更方法の詳細については、「ユーザーの管理」をご参照ください。
構成可能なパラメータの詳細については、「DruidDataSource パラメータ構成」をご参照ください。
Druid のパラメータ構成を読み込み、接続プールを初期化します。
// パラメータ構成を読み込みます。 Properties properties = new Properties(); InputStream inputStream = DruidPoolDemo.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(inputStream); // 接続プールを初期化します。 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Druid を使用して JDBC から接続情報を取得し、LindormTable に接続します。
/* -------------- JDBC を使用して LindormTable に接続する方法の例 ----------------- */ String tableName = "sql_table_" + new Random().nextInt(1000); // テーブルを作成します。 try (Connection connection = dataSource.getConnection()) { try (Statement statement = connection.createStatement()) { String sql = "create table if not exists " + tableName + "(id VARCHAR, name VARCHAR, primary key(id))"; int ret = statement.executeUpdate(sql); System.out.println(ret); } } // テーブルにデータを挿入します。 try (Connection connection = dataSource.getConnection()) { String sql = "upsert into " + tableName + "(id,name) values(?,?)"; try (PreparedStatement ps = connection.prepareStatement(sql)) { ps.setString(1, "aa"); ps.setString(2, "bb"); int ret = ps.executeUpdate(); System.out.println(ret); } } // テーブル内のデータをクエリします。 try (Connection connection = dataSource.getConnection()) { String sql = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(sql)) { ps.setString(1, "aa"); ResultSet rs = ps.executeQuery(); while (rs.next()) { String id = rs.getString(1); String name = rs.getString(2); System.out.println("id=" + id); System.out.println("name=" + name); } } } // テーブルからデータを削除します。 try (Connection connection = dataSource.getConnection()) { String sql = "delete from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(sql)) { ps.setString(1, "aa"); ps.executeUpdate(); } }