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に含めるためには、別途設定が必要となります。
詳細は以下の記事をご確認ください。
参考
JavaDevCorner: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