TiDB User Day 2024のアーカイブ動画を公開中!詳細を見る
spring boot tidb

※このブログは2022年08月25日に公開された英語ブログ「Building a Web Application with Spring Boot and TiDB」の拙訳です。

著者: Qizhi Wang (PingCAPシニアソフトウェアエンジニア)
編集者: Fendy Feng, Tom Dewan, Rick Golba

Webアプリケーションの開発者は、より良いアプリケーションをより速く、より簡単に構築することを常に追求しています。このブログでは、開発プロセスを簡素化し、アプリケーションの目標を容易に実現する2つの優れたツール、Spring BootTiDBについて紹介します。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の無料クラスタを作成することができます。

アプリケーションコードの取得

サンプルアプリケーションのリポジトリをローカル環境にダウンロードまたはクローンし、 spring-jpa-hibernate ディレクトリに移動します。

アプリケーションを実行する

先ほど作成した空のアプリケーションでは、Hibernateが test データベース内に player_jpa テーブルを作成します。アプリケーションのRESTful APIを使用してリクエストを行うと、これらのリクエストはTiDBクラスタ上でデータベーストランザクションを実行します。

TiDB Cloudクラスタを使用する場合は、 src/main/resources ディレクトリに移動し、application.yml ファイルで、spring.datasource.urlspring.datasource.usernamespring.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/3GETリクエストが送信されます。戻り値は、最大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

Have questions? Let us know how we can help.

Contact Us

TiDB Cloud Dedicated

TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。

TiDB Cloud Serverless

TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。