Web系開発メモ

Java, C#, HTML, CSS, JavaScript のことなどを書いてます。

HikariCP コネクションプールを使ってDBに接続する方法

HikariCP のコネクションプールを使って、PostgreSQL に接続して SQL を実行する方法を書いていきます。

HikariCP について

HikariCP は、軽量で高速なコネクションプールのライブラリです。シンプルな実装で信頼性が高く、Commons DBCP や Vibur DBCP より速いと言われています。

コネクションプールについて

コネクションプールを使うと、コネクション(DBへの接続)を原則切断せずに保持することになります。DBに繋いだ後は、接続と切断の処理を省略できるので、パフォーマンスが向上します。

バージョン

ブログ執筆時の製品バージョンは以下の通りです。

Java のバージョンによって、HikariCP のバージョンを変更する必要があります。詳細は 公式サイト を参照して頂ければと思います。

1. ビルドファイルの作成

以下のビルドファイルを作成します。

pom.xml

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.sample</groupId>
  <artifactId>sample-hikaricp</artifactId>
  <version>0.0.1</version>
  <packaging>jar</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>com.zaxxer</groupId>
      <artifactId>HikariCP</artifactId>
      <version>5.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.5.1</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.30</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.30</version>
    </dependency>
  </dependencies>
</project>

SLF4J は、HikariCP が依存しているので追加しています。

2. Javaコードの作成

以下のソースコードを作成します。

src/main/java/org/sample/Main.java

package org.sample;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Main {
  public static void main(String[] args) throws SQLException {
    // コネクションプールを作成
    HikariConfig conf = new HikariConfig();
    conf.setJdbcUrl("jdbc:postgresql://localhost/test");
    conf.setUsername("usr");
    conf.setPassword("pass");
    HikariDataSource ds = new HikariDataSource(conf);
    // コネクションを取得してSQLを実行
    String sql = "select current_timestamp as now";
    try (
      Connection con = ds.getConnection();
      PreparedStatement ps = con.prepareStatement(sql);
      ResultSet rs = ps.executeQuery()
    ) {
      // 実行結果を標準出力
      rs.next();
      System.out.println(rs.getTimestamp("now"));
    }
    ds.close();
  }
}

以下の情報で、ローカルの PostgreSQL に接続しています。

  • データベース:test
  • ユーザー:usr
  • パスワード:pass

最後にデータソースをクローズしていますが、アプリの稼働中はクローズしないで使い続けます。

3. 動作確認

上のプログラムを実行すると、現在日時が出力されます。