これまでOracle Database@Azure の記事を書いてきましたが、今回は Azure AppService のアプリケーションを Oracle Database@Azure の AutonomousDB に接続する構成を紹介します。
AutonomousDB と AppService の2つの Paas を用いることで、仮想マシンを用意することなく、Web + DB アプリケーションを作成できます。
AutonomousDBにアクセスするAppServiceのアプリの構築手順を前編、後編の2回に分けて紹介します。
前編では、環境構築とアプリケーションの作成について紹介します。
環境構成
Vnet内に AutonomousDB と AppService を統合した構成とし、アプリケーション開発、データベース操作を行う仮想マシンを構築します。

AutonomousDB
Oracle Database@Azure におけるAutonomousDBの構築については以前の記事を参照してください。
今回の記事では データベース名を apdb001 として作成しています。
ネットワーク設定のアクセスタイプは「管理対象プライベート仮想ネットワークIPのみ」を選択し、「相互TLS (mTLS)認証が必要」にチェックをつけてください。
作成後にOCIコンソールに移動して、ウォレットをダウンロードします。

Azure AppService
SpringBoot で作成したアプリを動かすために、Javaを実行できる環境を構築します。
AppServiceから「+作成」-「+Web アプリ」をクリックします。

「基本」タブの各項目を設定します。Linuxプランには無料で使えるFreeもありますが、Vnet統合したいのでBasic以上を選択します。
| 項目 | 設定値 |
|---|---|
| サブスクリプション | (利用するサブスクリプション) |
| リソースグループ | (利用するリソースグループ) |
| 名前 | アプリケーション名(URLになるので一意に設定する) |
| 公開 | コード |
| ランタイムスタック | Java 21 |
| Java Web サーバーのスタック | Java SE (Embedded Web Server) |
| オペレーティング システム | Linux |
| リージョン | Japan East |
| Linux プラン (Japan East) | 新規作成 |
| 価格プラン | Basic 以上のプラン |
| ゾーン冗長 | 無効 |

「データベース」タブでは SQLAzure、PostgreSQL、MySQL、Cosmos DBのいずれかのデータベースを一緒に作成できますが、今回はOracleを用意するのでチェックをつけずに次に進みます。

「デプロイ」タブではGitHubとの連携ができますが、直接アプリをサーバーにアップするので何も設定せずに次に進みます。
「ネットワーク」タブでは仮想ネットワーク統合を有効にして仮想ネットワークに統合します。Oracleデータベースと同じ仮想ネットワークに作成することでAppServiceからOracle Database@AzureのAutonomousDBにアクセスできるようになります。
| 項目 | 設定値 |
|---|---|
| パブリックアクセスを有効にする | オン |
| 仮想ネットワーク統合を有効にする | オン |
| プライベート エンドポイントの有効化 | オフ |
| VNet 統合を有効にする | オン |
| 送信サブネット | データベースと同じVnetの空のサブネット |

「監視とセキュリティ保護」タブではApplication Insightsの設定ができます。今回は接続確認なので「いいえ」を選択します。
「タグ」タブでは特に設定することがないので、そのまま次に進みます。
「確認および作成」タブで設定内容を確認して作成します。
アプリケーション開発環境
データベース、AppServiceと同じVnet上にLinuxの仮想マシンを構築して、これを仮想マシンとします。
まずはJavaをインストールします。
$ sudo dnf install -y java-21-openjdk $ sudo dnf install -y java-21-openjdk-devel $ java -version
ビルドツールのmavenをインストールします。
$ sudo dnf install -y maven $ mvn -version
プロジェクトを作成し、Spring Bootのひな形をダウンロードします。
mkdir my-adb-app cd my-adb-app curl https://start.spring.io/starter.tgz \ -d dependencies=web,jdbc \ -d javaVersion=21 \ -d bootVersion=3.2.0 \ -d type=maven-project \ -d packageName=com.example.demo \ -d name=demo | tar -xzvf -
AutonomousDB 作成時にダウンロードしたzipファイルのウォレットを /my-adb-app/src/main/resources/walletに展開して格納します。
以下はプロジェクトの構成例になります。
my-adb-app/ ├── pom.xml ├── src/ │ └── main/ │ ├── java/com/example/demo/ │ │ ├── Memo.java │ │ ├── MemoController.java │ │ └── MemoRepository.java │ └── resources/ │ ├── application.properties │ ├── templates │ │ └── memo-list.html │ └── wallet/ (ここに Wallet の中身を配置) │ ├── cwallet.sso │ ├── tnsnames.ora │ └── ...
アプリケーション作成
今回はサンプルとして、データベースのテーブルの内容を表示するWEBアプリを作成します。
依存関係 (pom.xml) の整備
pom.xmlに以下の依存関係を追加します。
<dependencyManagement> <dependencies> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc-bom</artifactId> <version>23.2.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <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> </dependency> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc11-production</artifactId> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> </dependencies>
データベース接続設定 (application.properties)
接続情報は、変数を用いて application.properties を以下のように編集します。文字コードもここで設定します。
Oracleデータベースの接続先文字列は AutonomousDB 作成時に取得したウォレットに含まれる tnsnames.ora ファイルに記載されています。
# Web エンコーディングの設定 spring.http.encoding.charset=UTF-8 spring.http.encoding.enabled=true spring.http.encoding.force=true # サーバポート(デフォルト8080) server.port=80 # DB接続設定 # ${環境変数名:デフォルト値} という形式で記述します # Azure上では環境変数 TNS_ADMIN_PATH が優先され、ローカルでは /home/user01/wallet が使われます spring.datasource.url=jdbc:oracle:thin:@apdb001_medium?TNS_ADMIN=${TNS_ADMIN_PATH:/home/user01/wallet}&oracle.jdbc.defaultNChar=true&CharacterEncoding=utf-8 spring.datasource.username=${DB_USER:ADMIN} spring.datasource.password=${DB_PASSWORD:YourLocalPassword123} # SQLの実行ログを出力(動作確認に便利) logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
Entity(データモデル)の作成
DB の 1 行を表現する Java クラスを作成します。
ファイル名: src/main/java/com/example/demo/Memo.java
package com.example.demo; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; import java.time.LocalDateTime; @Table("MEMOS") public record Memo(@Id Long id, String content, LocalDateTime createdAt) {}
Repository(データアクセス層)の作成
Spring Data JDBC が提供するインターフェースを作成するだけで、SQL を書かずに基本的な操作が可能になります。
ファイル名: src/main/java/com/example/demo/MemoRepository.java
package com.example.demo; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; import java.time.LocalDateTime; @Table("MEMOS") public record Memo(@Id Long id, String content, LocalDateTime createdAt) {} [user01@OP1 demo]$ cat MemoRepository.java package com.example.demo; import org.springframework.data.repository.ListCrudRepository; public interface MemoRepository extends ListCrudRepository<Memo, Long> { // これだけで findAll(), save(), deleteById() などが使えます }
Controller の更新
メモの一覧表示と追加ができるようにします。
ファイル名: src/main/java/com/example/demo/MemoController.java
package com.example.demo; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class MemoController { private final MemoRepository repository; public MemoController(MemoRepository repository) { this.repository = repository; } @GetMapping("/memos") public String viewMemos(Model model) { // DBから全件取得して "memos" という名前で画面に渡す model.addAttribute("memos", repository.findAll()); return "memo-list"; // 次に作る memo-list.html を呼び出す } }
HTML テンプレート(表形式)の作成
Spring Boot が自動的に読み込む場所に、表示用の HTML ファイルを作成します。
- ディレクトリ:
src/main/resources/templates/(フォルダがない場合は作成してください) - ファイル名:
memo-list.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>メモ一覧</title> <style> table { border-collapse: collapse; width: 80%; margin-top: 20px; } th, td { border: 1px solid #ddd; padding: 12px; text-align: left; } th { background-color: #f4f4f4; } tr:nth-child(even) { background-color: #f9f9f9; } </style> </head> <body> <h1>Oracle ADB メモ一覧</h1> <table> <thead> <tr> <th>ID</th> <th>内容</th> <th>登録日時</th> </tr> </thead> <tbody> <tr th:each="memo : ${memos}"> <td th:text="${memo.id}">1</td> <td th:text="${memo.content}">サンプル内容</td> <td th:text="${#temporals.format(memo.createdAt, 'yyyy-MM-dd HH:mm:ss')}">2026-01-06</td> </tr> </tbody> </table> </body> </html>
サンプルデータ作成
ブラウザで表示するデータをAutonomousDBに作成します。
CREATE TABLE memos ( id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, content VARCHAR2(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- サンプルデータの挿入 INSERT INTO memos (content) VALUES ('SQLから直接更新'); INSERT INTO memos (content) VALUES ('こんにちは'); COMMIT;
おわりに
AutonomousDB と AppService の連携の前編として、AppService、AutonomousDBの構築とアプリケーションの作成について紹介しました。
アプリケーションを実行するための環境とアプリケーション本体が揃ったため、動作確認を行える状態となります。
後編ではアプリケーションをビルドしてAppServiceでWEBアプリを公開する手順を紹介します。