Oracle Autonomous AI Database for JSONを使用したリアクティブSpring WebFlux (R2DBC)アプリケーションの構築 (2026/01/05)

Oracle Autonomous AI Database for JSONを使用したリアクティブSpring WebFlux (R2DBC)アプリケーションの構築 (2026/01/05)

https://blogs.oracle.com/developers/building-a-reactive-spring-webflux-r2dbc-application-with-oracle-autonomous-ai-database-for-json

投稿者: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 WalletSSL認証のための安全な資格情報ストア
Spring WebFluxProject 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を構成する

  1. Autonomous AI Databaseインスタンスを作成
  2. ADB Walletをダウンロードして、TNSNAMES.oraをWalletを指すように設定してください。
  3. 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 )
JSONコレクション

ステップ2: Spring Bootプロジェクトの作成と構成

2.1 プロジェクトの初期化

2.2 依存関係を追加する

  1. Spring リアクティブ Web (WebFlux)
  2. スプリングデータ R2DBC
  3. Oracle R2DBC ドライバー
  4. スプリングブートアクチュエータ(オプション)

プロジェクト構造の例


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
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=./wallet

クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
spring:
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:run

5.2 Postmanでテストする

ここで、顧客ID1001のドキュメントを取得してみます。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
GET → http://localhost:8082/customers/1001

GET呼び出しの出力は次のとおりです。 

顧客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/customers

POST呼び出しの更新された結果セット

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

まとめ

Spring WebFlux、  R2DBC、  Oracle Autonomous AI Database を統合することで 、開発者は、  複雑な JSON データを リアルタイムの応答性で処理できる、スケーラブルで安全な、完全にリアクティブであるアプリケーション (非ブロッキング リアクティブ アーキテクチャ) を 構築できます。

このセットアップは、データベース アクセス パターンを最新化するだけでなく、 クラウド ネイティブ、 マイクロサービス指向、 イベント駆動型の アーキテクチャにも完全に適合します。

このアプローチにより、リアクティブ・プログラミング と Oracle Cloud の強力なデータベース自動化の可能性を最大限に引き出し 、次世代のデータ駆動型アプリケーションを実現できます。

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

ミリ秒の問題: BCCグループとOCIが市場データ・パフォーマンスを再定義する方法(AWSに対するベンチマークを使用) (2025/11/13)

OCIサービスを利用したWebサイトの作成 その4~Identity Cloud Serviceでサイトの一部を保護 (2021/12/30)