Spring BootでOracle データベースに接続する方法

Spring BootでOracle データベースに接続する方法をご紹介します。

条件

  • Spring Boot 2.1.4
  • maven
  • Oracle Database 12c Release 2 (x64)
  • Windows 10 64bit

前提

ローカル環境にオラクル データベースがインストール済みであるものとします。

Oracle DatabaseをWindowsにインストール&接続する方法

Spring BootでDBからデータを取得するプロジェクトが作成済みであるものとします。

Spring Bootでデータベース(PostgreSQL)にアクセスする方法

jarのダウンロード

ojdbc Driverのjar(ojdbc8.jar)を以下からダウンロードします。

https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html

Mavenの参照設定

jarの配置

ダウンロードしたJarを、以下のように対象プロジェクトのlibフォルダ下に配置します。

pom.xml

以下を追記します。

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/ojdbc8.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

「HikariCP」はJDBCのコネクションプールフレームワークです。
コネクション作成のオーバーヘッドを減らすことが出来ます。

接続設定

application.properties

以下のように、オラクル データベースへの接続情報を記述します。

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=<your username>
spring.datasource.password=<your password>
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver

<参考>
ユーザー名:sysの場合は以下の通りに設定する。

spring.datasource.username=sys as sysdba

実行結果

オラクル データベースからレコードを取得することが出来ます。

2019-04-29 15:52:21.420 DEBUG 12984 --- [nio-8080-exec-1] org.hibernate.SQL                        : 
    select
        weather0_.id as id1_0_,
        weather0_.date_time as date_time2_0_,
        weather0_.humidity as humidity3_0_,
        weather0_.location_id as location_id4_0_,
        weather0_.name as name5_0_,
        weather0_.temperature as temperature6_0_ 
    from
        weather weather0_
2019-04-29 15:52:21.460 DEBUG 12984 --- [nio-8080-exec-1] org.hibernate.SQL                        : 
    select
        weather0_.id as id1_0_,
        weather0_.date_time as date_time2_0_,
        weather0_.humidity as humidity3_0_,
        weather0_.location_id as location_id4_0_,
        weather0_.name as name5_0_,
        weather0_.temperature as temperature6_0_ 
    from
        weather weather0_ 
    where
        weather0_.name=?
2019-04-29 15:52:21.463 TRACE 12984 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [東京]
2019-04-29 15:52:21.468 DEBUG 12984 --- [nio-8080-exec-1] org.hibernate.SQL                        : 
    select
        weather0_.id as id1_0_,
        weather0_.date_time as date_time2_0_,
        weather0_.humidity as humidity3_0_,
        weather0_.location_id as location_id4_0_,
        weather0_.name as name5_0_,
        weather0_.temperature as temperature6_0_ 
    from
        weather weather0_ 
    where
        weather0_.name=?
2019-04-29 15:52:21.468 TRACE 12984 --- [nio-8080-exec-1] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [那覇]
*** JDBC Start. ***
{ID=1, LOCATION_ID=1, NAME=東京, TEMPERATURE=15, HUMIDITY=55, DATE_TIME=2019-04-29 09:00:00.0}
{ID=2, LOCATION_ID=1, NAME=東京, TEMPERATURE=16, HUMIDITY=53, DATE_TIME=2019-04-29 10:00:00.0}
{ID=3, LOCATION_ID=1, NAME=東京, TEMPERATURE=17, HUMIDITY=40, DATE_TIME=2019-04-29 11:00:00.0}
{ID=4, LOCATION_ID=2, NAME=那覇, TEMPERATURE=20, HUMIDITY=65, DATE_TIME=2019-04-29 09:00:00.0}
{ID=5, LOCATION_ID=2, NAME=那覇, TEMPERATURE=22, HUMIDITY=67, DATE_TIME=2019-04-29 10:00:00.0}
{ID=6, LOCATION_ID=2, NAME=那覇, TEMPERATURE=25, HUMIDITY=69, DATE_TIME=2019-04-29 11:00:00.0}
*** JDBC End. ***

接続先の切り替え

以下の記事のように、開発用と本番用で接続先DBを切り替えることも出来ます。

Spring Bootでapplication.propertiesを環境ごとに切り替える方法

設定

以下のDB接続を仮定します。

  • 開発用:PostgreSQL
  • 本番用:Oracle Database

pom.xml

JPA、JDBCと共に、postgresql、ojdbc8をdependencyに記述します。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>12.2.0.1</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/ojdbc8.jar</systemPath>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

application.properties

「spring.profiles.active=」で参照するプロパティを指定します。
以下では、「application-production.properties」が参照されます。

#spring.profiles.active=development
spring.profiles.active=production

application-development.propertiesの例

PostgreSQLの接続情報を記述します。

spring.jpa.database=POSTGRESQL
spring.datasource.url=jdbc:postgresql://localhost:5432/testdb
spring.datasource.username=<username>
spring.datasource.password=<password>
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

application-production.propertiesの例

Oracle Databaseの接続情報を記述します。

spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.username=<username>
spring.datasource.password=<password>
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

Warへのjar追加設定

上記の設定では、STSで動作させる分には問題ありませんが、warを作成する際に「ojdbc8.jar」が含まれないという問題があります。

「ojdbc8.jar」をwarに含めるためには、別途設定が必要となります。

詳細は以下の記事をご確認ください。

Spring Bootで外部jarをwarに追加する方法

参考

JavaDevCorner:Spring Boot – Oracle Database Connection

Spring Boot – Oracle Database Connection

Oracle公式:Oracle Database 12.2.0.1 JDBC Driver & UCP Downloads

https://www.oracle.com/technetwork/database/features/jdbc/jdbc-ucp-122-3110062.html

Spring BootでORACLEデータベースに接続する方法

Spring BootでOracleデータベースに接続する方法

Mavenプロジェクトにローカルjarファイルを追加する方法

Mavenプロジェクトにローカルjarファイルを追加する方法

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です