Spring Boot からPostgreSQL のデータに接続する方法
Spring Boot は、Java Web アプリケーションの開発を容易にするフレームワークです。 最小限の設定でスタンドアロンアプリケーションを作成できるのが特徴です。 CData JDBC Driver for PostgreSQL と組み合わせることで、Spring Boot からリアルタイムのPostgreSQL のデータを扱えるようになります。 この記事では、CData JDBC Driver for PostgreSQL を使用してSpring Boot アプリケーションでデータソースを設定し、データを取得する方法を説明します。
ビルトインの最適化されたデータ処理機能により、CData JDBC Driver は リアルタイムのPostgreSQL のデータとのやり取りにおいて比類のないパフォーマンスを発揮します。PostgreSQL に 複雑なSQL クエリを発行すると、ドライバーはフィルタや集計などのサポートされている SQL 操作を直接PostgreSQL にプッシュし、サポートされていない操作(多くの場合SQL 関数や JOIN 操作)は組み込みのSQL エンジンを利用してクライアント側で処理します。 組み込みの動的メタデータクエリにより、ネイティブのデータ型を使用して PostgreSQL のデータを操作・分析できます。
Java でSpring Boot プロジェクトを作成
IDE(このチュートリアルではIntelliJ を使用)で、Maven プロジェクトを選択します:
生成されたプロジェクトで、pom.xml ファイルを開き、Spring Boot に必要な依存関係を追加します:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.2</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-install-plugin</artifactId> <version>2.5.1</version> <executions> <execution> <id>id.install-file</id> <phase>clean</phase> <goals> <goal>install-file</goal> </goals> <configuration> <file>C:\Program Files\CData[product_name] ####\lib\cdata.jdbc.postgresql.jar</file> <groupId>org.cdata.connectors</groupId> <artifactId>cdata-postgresql-connector</artifactId> <version>23</version> <packaging>jar</packaging> </configuration> </execution> </executions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>org.cdata.connectors</groupId> <artifactId>cdata-postgresql-connector</artifactId> <version>23</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <distributionManagement> <repository> <uniqueVersion>false</uniqueVersion> <id>test</id> <name>My Repository</name> <url>scp://repo/maven2</url> <layout>default</layout> </repository> </distributionManagement> </project>
Note: 年(####)とバージョン番号(上記のXML スクリプトに記載)は、使用しているCData JDBC Driver の現在のバージョンに合わせて調整してください。
プロジェクト構造
java ディレクトリに新しいパッケージを作成します。通常、パッケージ名はgroupId
(com.example)の後にartifactId(.MDS)を付けたものになります。
「java」ディレクトリを「Sources Root」としてマーク(青色で表示)します。これを行うには、java ディレクトリを右クリックし、「Mark Directory as」->「Sources Root」を選択します(以下を参照)。また、「resources」ディレクトリを「Resources Root」としてマークします。
データベース接続プロパティの保存
データベース接続プロパティを保存するための「application.properties」ファイルを作成します。これを行うには、「resources」フォルダを右クリックし、「New」->「File」を選択し、ファイル名を「application.properties」と入力してEnter を押します。
application.properties ファイルで、クラス名とJDBC URL を使用してPostgreSQL JDBC Driver の設定プロパティを設定します:
spring.datasource.driver=cdata.jdbc.postgresql.PostgreSQLDriver spring.datasource.url=jdbc:postgresql:User=postgres;Password=admin;Database=postgres;Server=127.0.0.1;Port=5432;
組み込みの接続文字列デザイナー
JDBC URL の作成については、PostgreSQL JDBC Driver に組み込まれている接続文字列デザイナーを使用してください。JAR ファイルをダブルクリックするか、コマンドラインからjar ファイルを実行します。
java -jar cdata.jdbc.postgresql.jar
PostgreSQL への接続には、Server、Port(デフォルトは5432)、Database、およびUser、Password のプロパティを設定します。Database プロパティが設定されない場合には、User のデフォルトデータベースに接続します。
パスワード方式によるSSH 接続
パスワード方式によるSSH接続時に必要なプロパティ一覧を以下に示します。
- User: PostgreSQL のユーザ
- Password: PostgreSQL のパスワード
- Database: PostgreSQL の接続先データベース
- Server: PostgreSQL のサーバー
- Port: PostgreSQL のポート
- UserSSH: "true"
- SSHAuthMode: "Password"
- SSHPort: SSH のポート
- SSHServer: SSH サーバー
- SSHUser: SSH ユーザー
- SSHPassword: SSH パスワード
接続文字列形式では以下のようになります。
User=admin;Password=adminpassword;Database=test;Server=postgresql-server;Port=5432;UseSSH=true;SSHPort=22;SSHServer=ssh-server;SSHUser=root;SSHPassword=sshpasswd;
公開鍵認証方式によるSSH 接続
公開鍵認証によるSSH接続時に必要なプロパティ一覧を以下に示します。
- User: PostgreSQL のユーザ
- Password: PostgreSQL のパスワード
- Database: PostgreSQL の接続先データベース
- Server: PostgreSQL のサーバー
- Port: PostgreSQL のポート
- UserSSH: "true"
- SSHAuthMode: "Public_Key"
- SSHClientCertType: キーストアの種類
- SSHPort: SSH のポート
- SSHServer: SSH サーバー
- SSHUser: SSH ユーザー
- SSHClientCert: 秘密鍵ファイルのパス
接続文字列形式では以下のようになります。
User=admin;Password=adminpassword;Database=test;Server=PostgreSQL-server;Port=5432;UseSSH=true;SSHClientCertType=PEMKEY_FILE;SSHPort=22;SSHServer=ssh-server;SSHUser=root;SSHClientCert=C:\Keys\key.pem;
application.properties ファイルでプロパティを設定したら、次にそれらを構成します。
データソースの設定
まず、PostgreSQL データソースをプライマリデータソースとしてマークします。次に、データソースBean を作成します。
DriverManagerDataSource.java ファイルを作成し、以下のようにBean を作成します。@Bean でエラーが発生する場合、 Spring Boot が正しくロードされていない可能性があります。これを修正するには、「File」->「Invalidate Caches」でキャッシュを無効にして再起動します。 また、Maven がSpring Boot の依存関係を追加していることを確認してください。
データソースBean を作成するには、DriverManagerDataSource クラスを使用します。このクラスを使用すると、
データソースのプロパティを設定できます。このJava クラスを作成するには、「com.example.MDS」パッケージを右クリックし、「New」->「Java Class」を選択します。
以下のコードは、データソースのBean 定義を示しています。各ドライバーにはBean が必要です。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import javax.sql.DataSource;
public class DriverManagerDataSource{
@Autowired
private static Environment env;
@Bean(name ="PostgreSQL")
@Primary
public static DataSource PostgreSQLDataSource()
{
DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName("cdata.jdbc.postgresql.PostgreSQLDriver");
dataSourceBuilder.url("jdbc:postgresql:User=postgres;Password=admin;Database=postgres;Server=127.0.0.1;Port=5432;");
return dataSourceBuilder.build();
}
//@Override
public void setEnvironment( final Environment environment) {
env=environment;
}
}
次に、PostgreSQL jar ファイルをDocuments フォルダに移動します(以下のコマンドのパスを参照)。jar ファイルのパスにスペースが含まれないようにするためです。次に、
Maven アイコン(IntelliJ の右上隅)をクリックし、「Execute Maven Goal」をクリックします。以下のコマンドを実行します:
mvn install:install-file "-Dfile=C:\Program Files\CData[product_name] ####\lib\cdata.jdbc.postgresql.jar" -DgroupId=org.cdata.connectors -DartifactId=cdata-postgresql-connector -Dversion=23 -Dpackaging=jar
このコマンドを実行するには、以下のいずれかの手順に従ってください:
- 「-Dfile location」はCData JDBC Driver のデフォルトのインストールパスのままにできます。この場合、パスを引用符で囲んでください。また、使用しているドライバーの現在のバージョンに基づいて年と「Dversion」を変更してください。
- 記事の前半で述べたように、
jar ファイルをDocuments フォルダに移動した場合は、提供されたコマンドのパスを変更してください。この場合、Dfile location を引用符で囲まないでください。使用しているドライバーの現在のバージョンに基づいて「Dversion」を編集してください。
Enter を押すと、以下の出力が表示されます:
接続のテスト
最後のステップは接続のテストです。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import java.sql.Connection;
import java.sql.SQLException;
import static com.example.demo.DriverManagerDataSources.PostgreSQLDataSource;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MDSApplication {
//remove the comment on the line below
public static void main (){
SpringApplication.run(DemoApplication.class, args);
Connection conn = PostgreSQLDataSource().getConnection();
System.out.println("Catalog: "+ conn.getCatalog());
}
}
生成される出力は以下のようになります:
無償トライアルと詳細情報
CData JDBC Driver for PostgreSQL の30日間の無償トライアルをダウンロードして、Spring Boot でリアルタイムのPostgreSQL データを使い始めましょう。