マイクロサー ビストランザクションを使用した Spring Data JDBC for ScalarDB のサンプルアプリケーション
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このチュートリアルでは、Spring Data JDBC for ScalarDB を使用してマイクロサービストランザクション用のサンプル Spring Boot アプリケーションを作成する方法について説明します。
これらの機能の詳細については、2フェーズコミットトランザクション および Spring Data JDBC for ScalarDB ガイドを参照してください。
このサンプルアプリケーションの前提条件
- Eclipse Temurin の OpenJDK LTS バージョン (8、11、17、または 21)
- Docker 20.10以降 (Docker Compose V2以降)
このサンプルアプリケーションは、Eclipse Temurin の OpenJDK でテストされています。ただし、ScalarDB 自体は、さまざまなベンダーの JDK ディストリビューションでテストされています。互換性のある JDK ディストリビューションを含む ScalarDB の要件の詳細については、要件を参照してください。
ScalarDB Cluster を使用するには、ライセンスキー (試用ライセンスまたは商用ライセンス) が必要です。ライセンスキーをお持ちでない場合は、お問い合わせください。
サンプルアプリケーション
概要
このチュートリアルでは、ScalarDB の2フェーズコミットインターフェースを使用したトランザクションを通じて、アイテムを注文し、信用枠で支払うことができるサンプル電子商取引アプリケーションを作成するプロセスについて説明します。
このサンプルアプリケーションには、Database-per-service pattern に基づく Customer Service と Order Service という2つのマイクロサービスがあります。
Customer Service は、 クレジット限度額やクレジット合計などのクレジットカード情報を含む顧客情報を管理します。Order Service は、注文の確定や注文履歴の取得などの注文操作を担当します。
各サービスには gRPC エンドポイントがあります。クライアントはエンドポイントを呼び出し、サービスも互いにエンドポイントを呼び出します。Customer Service と Order Service は、それぞれ ScalarDB を介して MySQL と Cassandra を使用します。

各サービスは、専用の ScalarDB Cluster を介してデータベースにアクセスします。
両方の ScalarDB Cluster は、Consensus Commit プロトコルに使用される小さな Coordinator データベースにアクセスします。このサンプルアプリケーションでは、セットアップと説明を簡単にするために、Coordinator データベースは Order Service の同じ Cassandra インスタンスに共存していますが、もちろん、Coordinator データベースは別のデータベースとして管理できます。
また、サンプルアプリケーションでは ScalarDB の使用方法の説明に重点を置いているため、アプリケーション固有のエラー処理、認証処理などは省略されています。
ScalarDB での例外処理の詳細については、例外の処理方法を参照してください。
サービスエンドポイント
サービスで定義されているエンドポイントは次のとおりです。
-
Customer Service
getCustomerInfopaymentpreparevalidatecommitrollbackrepayment
-
Order Service
placeOrdergetOrdergetOrders
このサンプルアプリケーションで実行できること
サンプル アプリケーションは、次の種類のトランザクションをサポートしています。
- Customer Service の
getCustomerInfoエンドポイントを介して顧客情報を取得します。 - Order Service の
placeOrderエンドポイントと、Customer Service のpayment、prepare、validate、commit、rollbackエンドポイントを介して、信用枠を使用して注文を行います。- 注文のコストが顧客の信用限度額を下回っているかどうかを確認します。
- チェックに合格した場合、注文履歴を記録し、顧客が支払った金額を更新します。
- Order Service の
getOrderエンドポイントと、Customer Service のgetCustomerInfo、prepare、validate、commit、rollbackエンドポイントを介して、注文 ID で注文情報を取得します。 - Order Service の
getOrdersエンドポイントと、Customer Service のgetCustomerInfo、prepare、validate、commit、rollbackエンドポイントを介して、顧客 ID で注文情報を取得します。 - Customer Service の
repaymentエンドポイントを介して支払いを行います。- 顧客が支払った金額を減らします。
getCustomerInfo エンドポイントは、コーディネーターからトランザクション ID を受信するときに、参加者サービスエンドポイントとして機能します。
ScalarDB Cluster の設定
Customer Service 用の ScalarDB Cluster の設定は次のとおりです。
scalar.db.storage=multi-storage
scalar.db.multi_storage.storages=cassandra,mysql
scalar.db.multi_storage.storages.cassandra.storage=cassandra
scalar.db.multi_storage.storages.cassandra.contact_points=cassandra-1
scalar.db.multi_storage.storages.cassandra.username=cassandra
scalar.db.multi_storage.storages.cassandra.password=cassandra
scalar.db.multi_storage.storages.mysql.storage=jdbc
scalar.db.multi_storage.storages.mysql.contact_points=jdbc:mysql://mysql-1:3306/
scalar.db.multi_storage.storages.mysql.username=root
scalar.db.multi_storage.storages.mysql.password=mysql
scalar.db.multi_storage.namespace_mapping=customer_service:mysql,coordinator:cassandra
scalar.db.multi_storage.default_storage=mysql
scalar.db.consensus_commit.isolation_level=SERIALIZABLE
scalar.db.cluster.node.standalone_mode.enabled=true
scalar.db.sql.enabled=true
# License key configurations
scalar.db.cluster.node.licensing.license_key=
scalar.db.cluster.node.licensing.license_check_cert_pem=
scalar.db.sql.connection_mode: この設定は、ScalarDB への接続方法を決定します。scalar.db.storage: ScalarDB でマルチストレージトランザクションを使用するには、multi-storageを指定する必要があります。scalar.db.multi_storage.storages: ここでストレージ名を定義する必要があります。scalar.db.multi_storage.storages.cassandra.*: これらの設定は、scalar.db.multi_storage.storagesで定義されているストレージ名の1つであるcassandraストレージ用です。cassandraストレージのすべてのscalar.db.*プロパティをここで設定できます。scalar.db.multi_storage.storages.mysql.*: これらの設定は、scalar.db.multi_storage.storagesで定義されているストレージ名の1つであるmysqlストレージ用です。ここで、mysqlストレージのすべてのscalar.db.*プロパティを設定できます。scalar.db.multi_storage.namespace_mapping: この設定は、名前空間をストレージにマップします。このサンプルアプリケーションでは、customer_service名前空間テーブルの操作はmysqlストレージにマップされ、order_service名前空間テーブルの操作はcassandraストレージにマップされます。また、Consensus Commit トランザクションで使用されるcoordinator名前空間にマップされるストレージを定義することもできます。scalar.db.multi_storage.default_storage: この設定は、マッピングされていない名前空間テーブルでの操作に使用されるデフォルトのストレージ を設定します。scalar.db.sql.default_transaction_mode: ScalarDB で2フェーズコミットトランザクションモードを使用するには、two_phase_commit_transactionを指定する必要があります。scalar.db.consensus_commit.isolation_level: この設定は、ConsensusCommit に使用される分離レベルを決定します。
詳細については、マルチストレージトランザクションを参照してください。
Order Service 用の ScalarDB Cluster の設定は次のとおりです。
scalar.db.storage=cassandra
scalar.db.contact_points=cassandra-1
scalar.db.username=cassandra
scalar.db.password=cassandra
scalar.db.consensus_commit.isolation_level=SERIALIZABLE
scalar.db.cluster.node.standalone_mode.enabled=true
scalar.db.sql.enabled=true
# License key configurations
scalar.db.cluster.node.licensing.license_key=
scalar.db.cluster.node.licensing.license_check_cert_pem=
scalar.db.storage: このサービスは Cassandra のみを基盤データベースとして使用するため、cassandraが指定されています。scalar.db.contact_points: この設定では、Cassandra に接続するための連絡先 (ホストなど) を指定します。scalar.db.username: この設定では、Cassandra に接続するためのユーザー名を指定します。scalar.db.password: この設定では、Cassandra に接続するためのパスワードを指定します。scalar.db.sql.default_namespace_name: この設定では、デフォルトの名前空間がorder_serviceに設定されるため、アプリケーションで名前空間を指定する必要がなくなります。scalar.db.sql.default_transaction_mode: ScalarDB で2フェーズコミットトランザクションモードを使用するには、two_phase_commit_transactionを指定する必要があります。scalar.db.consensus_commit.isolation_level: この設定は、ConsensusCommit に使用される分離レベルを決定します。
このサンプルアプリケーションでは、ScalarDB Cluster はスタンドアロンモード (scalar.db.cluster.node.standalone_mode.enabled=true) で実行されています。
また、設定ファイルで ScalarDB Cluster のライセンスキー (試用ライセンスまたは商用ライセンス) を設定する必要があります。詳細については、製品ライセンスキーの設定方法を参照してください。
セットアップ
ScalarDB サンプルリポジトリのクローンを作成する
ターミナルを開き、次のコマンドを実行して ScalarDB サンプルリポジトリのクローンを作成します。
git clone https://github.com/scalar-labs/scalardb-samples
次に、次のコマンドを実行して、このサンプルがあるディレクトリに移動します。
cd scalardb-samples/spring-data-microservice-transaction-sample
ライセンスキーを設定する
設定ファイル scalardb-cluster-node-for-customer-service.properties および scalardb-cluster-node-for-order-service.properties で、ScalarDB Clusters のライセンスキー (試用ライセンスまたは商用ライセンス) を設定します。詳細については、製品ライセンスキーの設定方法 を参照してください。
Cassandra、MySQL、および ScalarDB Cluster を起動する
Cassandra、MySQL、および ScalarDB Cluster を起動するには、次の docker-compose コマンドを実行する必要があります。
docker-compose up -d cassandra mysql scalardb-cluster-node-for-customer-service scalardb-cluster-node-for-order-service
コンテナが完全に起動するまで1分以上待つ必要があります。