Oracle Autonomous AI Database for JSONを使用したリアクティブSpring WebFlux (R2DBC)アプリケーションの構築 (2026/01/05)
Oracle Autonomous AI Database for JSONを使用したリアクティブSpring WebFlux (R2DBC)アプリケーションの構築 (2026/01/05)
投稿者:Sathishkumar Rangaraj | Master Principal Solution Architect
現代のクラウドネイティブ・アプリケーションには、高いスケーラビリティ、ノンブロッキング・パフォーマンス、そしてセキュアなデータ接続が求められます。このブログでは、 Oracle Autonomous AI Database (ADB)、 R2DBC、 Spring WebFlux を活用し 、 JSONデータを 効率的に保存・管理する、 完全にリアクティブなアプリケーションを構築する方法を紹介します。
手順を説明します
- R2DBC を使用してリアクティブ データベース接続を確立する
- JSONデータを保存および取得するためのリアクティブエンドポイントを構築する
- 安全な接続のためにOracle Walletを構成する
最終的には、 Oracle AI Database に安全に接続し、 ノンブロッキング パフォーマンスでシームレスな JSON データ管理を可能にする、クラウド対応のリアクティブ Spring Boot アプリケーションが完成します。
はじめに:
リアクティブ・プログラミングは、現代のクラウド・アプリケーションの基盤となり、システムの拡張性、同時実行性、そしてリアルタイム・パフォーマンスの実現を可能にしています。Oracle Autonomous AI Database と組み合わせることで 、開発者は以下のメリットを享受できます。
- 自動管理(手動によるチューニングやパッチ適用は不要)
- ネイティブJSONサポート
- 安全なウォレットベースの接続
これをSpring WebFlux および R2DBCと組み合わせることで、 最新のワークロードに対して安全でスケーラブルかつ効率的な、完全にリアクティブ なスタックを 実現できます 。
テクノロジースタックの概要
| 成分 | 目的 |
| Oracle Autonomous Database(ADB) | JSON サポートと安全なウォレット接続を備えたマネージド データベース |
| R2DBC (リアクティブリレーショナルデータベース接続) | リレーショナルデータベースへの非ブロッキングデータアクセス |
| Oracle Wallet | SSL認証のための安全な資格情報ストア |
| Spring WebFlux | Project Reactor 上に構築されたリアクティブ Web フレームワーク |
| Java 17 + Spring Boot 3.x | アプリケーションのランタイムと構成 |
| Maven と IntelliJ IDEA | ビルド自動化と開発環境 |
アーキテクチャの概要
反応フロー:
- クライアントは HTTP/HTTPS リクエストを送信します (例: Postman または UI 経由)。
- Spring WebFlux は、リアクティブ ストリーム (Mono/Flux) を使用してリクエストを処理します。
- R2DBC はデータベースとの非同期通信を管理します。
- Oracle Wallet は安全な接続を保証します。
- Oracle Autonomous AI Database は JSON データをネイティブに保存します。
アーキテクト図

Spring Webflux + R2DBC アプリケーション リアクティブ パイプライン

ステップバイステップの実装
ステップ1: Oracle ADBを構成する
- Autonomous AI Databaseインスタンスを作成
- ADB Walletをダウンロードして、TNSNAMES.oraをWalletを指すように設定してください。
- JSONコレクションテーブルを作成し、いくつかのレコードを挿入する
例
create JSON collection table CUSTOMER_DETAILS_J;
Insert into CUSTOMER_DETAILS_J (DATA) values ('{"_id":1001,"name":"crsk","phone":12345678,"Address":{"street":"200 Sporting Green","city":"chennai","state":"SNG1","zipCode":"600061","country":"SNG"},"card":"1234-5678-9012","lat":1.3421,"lng":103.8851}');
( Sample dataset can be seen here )
ステップ2: Spring Bootプロジェクトの作成と構成
2.1 プロジェクトの初期化
2.2 依存関係を追加する
- Spring リアクティブ Web (WebFlux)
- スプリングデータ R2DBC
- Oracle R2DBC ドライバー
- スプリングブートアクチュエータ(オプション)
プロジェクト構造の例
src/ main/ java/com/example/reactiveapp/ controller/ service/ repository/ model/ resources/ application.yml wallet/ (place extracted ADB-wallet files here)
Maven 依存関係 (pom.xml)
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-webflux</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-r2dbc</artifactid> </dependency> <dependency> <groupid>com.oracle.database.r2dbc</groupid> <artifactid>oracle-r2dbc</artifactid> <version>1.2.1</version> </dependency> </dependencies>
ステップ3: R2DBC接続を構成する (application.yml)
Example:
> url: r2dbc:oracle:tcps://adb.us-ashburn-1.oraclecloud.com:1522/db2025_high?walletLocation=./walletspring: r2dbc: url: r2dbc:oracle:tcps://<u><em><strong>adb.us-ashburn-1.oraclecloud.com</strong></em></u>:1522/db2025_high?walletLocation=./wallet username: <adb-user> password: <adb-user-password> main: web-application-type: reactive logging: level: org.springframework.r2dbc: DEBUG</adb-user-password></adb-user>
注: 上記の接続文字列の特定の地域の詳細に置き換えてください
ステップ4: リアクティブコンポーネントを構築する
4.1 モデルクラス(Java)
@Table("Customer_Details_J") public class JsonRecord { @Column("data") private String jsonData; }
4.2 リアクティブリポジトリ(Java)
public interface
JsonRepository extends ReactiveCrudRepository<jsonrecord, long=""> {}</jsonrecord,>注:
– 主キー (たとえば、ID 列) がデータベース レベルで定義されていない場合、リアクティブ リポジトリは使用できません。
– このような場合、サービス レイヤー内でカスタム クエリを使用してデータベース操作を処理する必要があります。
4.3 サービス層(Java)
@Service public class JsonService { private final JsonRepository repository; public JsonService(JsonRepository repository) { this.repository = repository; } public Mono<jsonrecord> save(JsonRecord record) { return repository.save(record); } public Flux<jsonrecord> findAll() { return repository.findAll(); }}</jsonrecord></jsonrecord>
4.4 コントローラー (Java)
@RestController @RequestMapping("/api/json") public class JsonController { private final JsonService service; public JsonController(JsonService service) { this.service = service; } @PostMapping public Mono<jsonrecord> create(@RequestBody JsonRecord record) { return service.save(record); } @GetMapping public Flux<jsonrecord> getAll() { return service.findAll(); } }</jsonrecord></jsonrecord>
ステップ5: テストと検証
5.1 アプリケーションを実行する
IntelliJ またはコマンドラインを使用して Spring Boot アプリを起動します。
mvn spring-boot:run5.2 Postmanでテストする
ここで、顧客ID1001のドキュメントを取得してみます。
GET → http://localhost:8082/customers/1001GET呼び出しの出力は次のとおりです。

顧客ID 1010のドキュメントをペイロードに以下の内容で更新してみます。
{ "_id": 1010, "name": "Name-101", "phone": 101101567, "Address": { "street": "1010 Sporting Green-1", "state": "SNG1", "zipCode": "601010", "country": "SNG" }, "card": "1234-5678-1010", "lat": 1.3421, "lng": 103.8851 }
POST → http://localhost:8082/customersPOST呼び出しの更新された結果セット

SQL*Plus で結果を表示することもできます。

まとめ
Spring WebFlux、 R2DBC、 Oracle Autonomous AI Database を統合することで 、開発者は、 複雑な JSON データを リアルタイムの応答性で処理できる、スケーラブルで安全な、完全にリアクティブであるアプリケーション (非ブロッキング リアクティブ アーキテクチャ) を 構築できます。
このセットアップは、データベース アクセス パターンを最新化するだけでなく、 クラウド ネイティブ、 マイクロサービス指向、 イベント駆動型の アーキテクチャにも完全に適合します。
このアプローチにより、リアクティブ・プログラミング と Oracle Cloud の強力なデータベース自動化の可能性を最大限に引き出し 、次世代のデータ駆動型アプリケーションを実現できます。
コメント
コメントを投稿