Oracle Code Tokyoでハンズオンのお手伝いをしてきました!
ハンズオンは、Rails / laravel / Django / Spring Bootの4つのフレームワークを利用して、Oracle CloudのAutonomous Transaction Processingサービス(Oracle 18c)へ接続するサンプルアプリと、その手順を作っています。
私はSpring Boot(JPAを利用)のサンプルアプリとハンズオン手順、また、それに合わせてアプリの検証環境構築用のTerraformも作りました。
ハンズオンの手順やアプリはこちらのGitHubリポジトリに置いています。
ハンズオン手順と内容がかぶるところも多いのですが、この機会に、環境の作り方やデータベース接続方法などを整理したいと思います。
今回は、いよいよ完結編。アプリケーション作成のポイントを書いていこうと思います。
構成や環境構築編の内容についてはこちら
Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - 環境構築編 - そこに仁義はあるのか(仮)
アプリケーションの設定についてはこちら
Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - アプリケーション環境編 - そこに仁義はあるのか(仮)
👌 アプリで使っているもの
記載レベルがバラバラですが、特筆すると以下のものを使っています。
- JDK 11
- Maven
- Spring Boot
- JPA
👌 pom.xml
Oracleのリポジトリからライブラリを取得します。
リポジトリを利用する際のmavenの認証設定についてはアプリケーション設定編で説明しています。
Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - アプリケーション環境編 - そこに仁義はあるのか(仮)
pomでは、リポジトリの追加と必要なライブラリの設定をしています。
ポイントになる箇所にコメントを記載しています。
<?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 http://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.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </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>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Thinドライバで基本機能をサポートするためのすべてのクラス--> <dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>18.3.0.0</version> </dependency> <!-- 接続プール機能を備えるUniversal Connection Pool(UCP)--> <dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>ucp</artifactId> <version>18.3.0.0</version> </dependency> <!-- Java からOracleウォレットにアクセスする--> <dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>oraclepki</artifactId> <version>18.3.0.0</version> </dependency> <dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>osdt_core</artifactId> <version>18.3.0.0</version> </dependency> <dependency> <groupId>com.oracle.jdbc</groupId> <artifactId>osdt_cert</artifactId> <version>18.3.0.0</version> </dependency> </dependencies> <!-- Oracleリポジトリの設定--> <repositories> <repository> <id>maven.oracle.com</id> <name>oracle-maven-repo</name> <url>https://maven.oracle.com</url> <layout>default</layout> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>maven.oracle.com</id> <name>oracle-maven-repo</name> <url>https://maven.oracle.com</url> <layout>default</layout> <releases> <enabled>true</enabled> <updatePolicy>always</updatePolicy> </releases> </pluginRepository> </pluginRepositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
👌 データベース接続設定を追加
「application.properties」ファイルにデータベース接続設定を定義します。(おまけで、ポート番号も80番にしています。)
Autonomous Databaseの作成の際にクラウドの管理画面にて設定したパスワードは「ADMIN」ユーザーに適用されます。
ハンズオンなどのサンプルアプリでは「ADMIN」ユーザーを利用しても良いですし、他にユーザーを作成していればそのユーザー名とパスワードを設定します。
データベースの接続名はこちらの手順でWalletファイルを取得した際に確認できる文字列です。
Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - 環境構築編 - そこに仁義はあるのか(仮)
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.url=jdbc:oracle:thin:@[データベース接続名]_TP spring.datasource.username=[データベース接続ユーザー名] spring.datasource.password=[データベース接続ユーザーのパスワード] server.port=80
接続名の後ろの「TP」についてはこちらにガイドがあります。
事前定義されたAutonomous Transaction Processingのデータベース・サービス名
Autonomous Data Warehouseの場合はこちらです。
Autonomous Data Warehouseの事前定義されたデータベース・サービス名
👌 シーケンスの設定
EntityクラスのID採番の設定をします。
事前にシーケンスを作成しておいてください。
シーケンスの作成方法についてはこちらのブログの「テーブルの作成」に記載しました。
Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - アプリケーション環境編 - そこに仁義はあるのか(仮)
Entityクラスをこちらに転記します。
ポイントはGeneratedValueとSequenceGeneratorの設定です。
作成したシーケンスを使って採番するよう設定しました。
package com.example.demo.domain; import javax.persistence.*; @Entity @Table(name = "Microposts") public class Micropost { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MICRO_SEQ") @SequenceGenerator(sequenceName = "micropost_seq", allocationSize = 1, name = "MICRO_SEQ") private Long id; private String content; public Micropost() { } public Micropost(String content) { this.content = content; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
以上で、3回に分けて記載したAutonomous DatabaseとSpring Bootを接続する手順は完了です!
お疲れ様でした!
構成や環境構築編の内容についてはこちら
Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - 環境構築編 - そこに仁義はあるのか(仮)
アプリケーションの設定についてはこちら
Spring BootのアプリとOracle CloudのAutonomous Databaseを接続する - アプリケーション環境編 - そこに仁義はあるのか(仮)