※このブログは2022年08月25日に公開された英語ブログ「Building a Web Application with Spring Boot and TiDB」の拙訳です。
著者: Qizhi Wang (PingCAPシニアソフトウェアエンジニア)
編集者: Fendy Feng, Tom Dewan, Rick Golba
Webアプリケーションの開発者は、より良いアプリケーションをより速く、より簡単に構築することを常に追求しています。このブログでは、開発プロセスを簡素化し、アプリケーションの目標を容易に実現する2つの優れたツール、Spring BootとTiDBについて紹介します。Spring Bootは、スタンドアロンのプロダクショングレードのWebアプリケーションをより速く、より簡単に構築できる人気のオープンソースツールです。TiDBは、オープンソースのSQLデータベースで、簡素化された分散型アーキテクチャ、伸縮自在のスケーラビリティ、MySQLとの互換性などを備えています。アプリケーションのデータがどんなに大きくても、簡単かつリアルタイムに処理、分析できるようにします。
今回は、Spring Bootを使って、TiDBをデータベースとするサンプルゲームアプリを構築します。このアプリでは、各プレイヤーは一意のIDを持っています。また、プレイヤーはコインとグッズの2つの属性を持ち、互いにトレードすることができます。
では、このゲームアプリの作り方を探っていきましょう。その前に、最終的にどのようなアプリケーションになるのか知りたい方は、GitHubでソースコード全体を見ることができます。
JDKとApache Mavenのインストール
アプリケーションの依存関係を管理するために、Java Development Kit (JDK) とApache Mavenをインストールする必要があります。詳細なガイダンスについては、JDKのインストール方法およびMavenのインストール方法に関するドキュメントを参照してください。
TiDBクラスタの作成と起動
ローカルにTiDBクラスタを作成するか、フルマネージドなDatabase-as-a-Service (DBaaS) であるTiDB Cloudの無料クラスタを作成することができます。
- ローカルのTiDBクラスタを作成するには、ローカルのテストクラスタのデプロイまたはTiUPを使用したTiDBクラスタのデプロイのいずれかを参照してください。
- TiDB Cloudの無料クラスタを作成するには、TiDB CloudでTiDBクラスタを構築するを参照してください。
アプリケーションコードの取得
サンプルアプリケーションのリポジトリをローカル環境にダウンロードまたはクローンし、 spring-jpa-hibernate
ディレクトリに移動します。
アプリケーションを実行する
先ほど作成した空のアプリケーションでは、Hibernateが test
データベース内に player_jpa
テーブルを作成します。アプリケーションのRESTful APIを使用してリクエストを行うと、これらのリクエストはTiDBクラスタ上でデータベーストランザクションを実行します。
TiDB Cloudクラスタを使用する場合は、 src/main/resources
ディレクトリに移動し、application.yml
ファイルで、spring.datasource.url
、spring.datasource.username
、spring.datasource.password
を設定してください。
spring:
datasource:
url: jdbc:mysql://localhost:4000/test
username: root
# password: xxx
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
database-platform: org.hibernate.dialect.TiDBDialect
hibernate:
ddl-auto: create-drop
パスワードを 123456
にした場合、TiDB Cloudで取得できる接続文字列は次のようになります:
mysql --connect-timeout 15 -u root -h xxx.tidbcloud.com -P 4000 -p
もちろん、実際にプロジェクトを作成する際には、より安全性の高いパスワードを使用することをお勧めします。
次に、以下のようにパラメータを設定します:
spring:
datasource:
url: jdbc:mysql://xxx.tidbcloud.com:4000/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
database-platform: org.hibernate.dialect.TiDBDialect
hibernate:
ddl-auto: create-drop
これらの変更を行った後、アプリケーションを実行することができます。
以下のように、ターミナルセッションを開きディレクトリに移動します:
cd <path>/tidb-example-java/spring-jpa-hibernate
Make
でアプリケーションをビルドして実行します。
make
HTTPリクエスト
サービスが起動したら、バックエンドアプリケーションにHTTPリクエストを送ることができます。http://localhost:8080は、サービスを提供するベースURLです。このアプリケーションを使用するには、PostmanやcURLなど、さまざまなHTTPリクエストを使用できます。このチュートリアルでは、Postmanリクエストを使用して、このアプリケーションの使用方法を説明します。
Postmanのリクエストを利用する
設定ファイルをダウンロードし、以下のようにPostmanにインポートします:
プレイヤー作成
「Create (作成)」タブと「Send (送信)」ボタンをクリックして、http://localhost:8080/player/
にPOSTリクエストを送信します。戻り値は、追加されたプレーヤーの数で、1であることが期待されます。
IDでプレイヤー情報を取得する
「GetByID」タブと「Send」ボタンをクリックして、http://localhost:8080/player/1にGETリクエストを送信します。戻り値はIDが1のプレーヤーの情報です。
プレイヤー情報を制限数で一括取得
「GetByLimit」タブと「Send」ボタンをクリックすると、http://localhost:8080/player/limit/3
GETリクエストが送信されます。戻り値は、最大3人のプレイヤーの情報リストです。
プレーヤー情報をページ単位で取得
「GetByPage」タブと「Send」ボタンをクリックして、http://localhost:8080/player/page?index=0&size=2
にGETリクエストを送信してください。戻り値は、インデックス0のページで、1ページあたり2人のプレーヤーが表示されます。戻り値には、オフセット、totalPages、ソート順などのページング情報も含まれています。
プレイヤー数
「Count」タブをクリックし、「Send」ボタンをクリックすると、http://localhost:8080/player/count
にGETリクエストが送信されます。戻り値はプレイヤーの数です。
プレーヤー取引
「Trade (取引)」タブをクリックし、「Send」ボタンをクリックして、http://localhost:8080/player/trade.
にPUTリクエストを送信します。リクエストのパラメータは、売り手のID(sellID
)、買い手のID(buyID
)、購入した商品の金額、購入金額に対して消費したコインの枚数です。
戻り値は取引が成功したかどうかを示す。売り手が十分な商品を持っていないとき、買い手が十分なコインを持っていないとき、またはデータベースエラーがあるとき、データベーストランザクションは取引が成功しないことを保証し、プレイヤーのコインや商品が失われることはありません。
まとめ
このブログでは、Spring BootとTiDBを使用してゲームアプリケーションを構築する方法を学び、いかに素早く簡単にそれができるかを見てきました。このゲームに関する実装の詳細を知りたい方は、ドキュメントの実装の詳細ページをご覧ください。
TiDBを体験するには、コミュニティエディションまたはTiDB Cloud無料トライアルをお試しください。日本語ドキュメントのTiDBクイックスタートガイド、またはTiDB Cloudワークショップガイドのご利用をお勧めします。ご不明な点などございましたら、お問い合わせフォームよりご連絡ください。 また、GitHubにて問題を報告することもできます。
Want to explore TiDB without installing any software? Go to TiDB Playground
TiDB Cloud Dedicated
TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。
TiDB Cloud Serverless
TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。