HikariCP のコネクションプールを使って、DB に接続して SQL を実行する方法を書いていきます。
HikariCP について
HikariCP は、軽量で高速なコネクションプールのライブラリです。シンプルな実装で信頼性が高く、Commons DBCP や Vibur DBCP より速いと言われています。
コネクションプールについて
コネクションプールを使うと、コネクション(DBへの接続)を原則切断せずに保持することになります。DBに繋いだ後は、接続と切断の処理を省略できるので、パフォーマンスが向上します。
バージョン
ブログ執筆時の製品バージョンは以下の通りです。
- Java 17
- HikariCP 5.0.1
- PostgreSQL 15.1
- pgJDBC 42.5.1(JDBC Driver)
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:5432/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. 動作確認
上のプログラムを実行すると、現在日時が出力されます。