Spring Data Spanner モジュールは、Spring Framework で構築された Java アプリケーションで Spanner を使用する場合に役立ちます。
すべての Spring Data モジュールと同様に、Spring Data Spanner では Spanner の整合性の保証とスケーラビリティを保持する Spring ベースのプログラミング モデルが提供されます。その機能は、Spanner 用に設計されたアノテーションを使用した Spring Data JPA と Hibernate ORM に似ています。 Spanner で Spring Data JPA を使用する方法について詳しくは、Spanner を Spring Data JPA(GoogleSQL 言語)と統合するをご覧ください。
Spring についてすでに習熟している場合、Spring Data Spanner を使用すると、アプリケーションで Spanner を使いやすくなり、作成する必要があるコードの量を減らすことができます。
このページでは、Spring Data Spanner を Java アプリケーションに追加する方法について説明します。モジュールの詳細については、Spring Data Spanner リファレンスをご覧ください。
モジュールをインストールする
Maven を使用する場合は、Spring Cloud GCP の部品表(BOM)と Spring Data Spanner を pom.xml ファイルに追加します。これらの依存関係によって、Spring ApplicationContext に Spring Data Spanner コンポーネントが提供されます。
また、サービス アカウントを作成し、サービス アカウント キーを使用して Google Cloudで認証する必要があります。
詳細については、Java 開発環境の設定の手順をご覧ください。Java 用 Google Cloud クライアント ライブラリをインストールする必要はありません。Spring Boot スターターによってクライアント ライブラリが自動的にインストールされます。
モジュールの設定
このセクションでは、Spring Data Spanner のよく使用されるいくつかの構成設定について説明します。設定の完全なリストについては、リファレンス ドキュメントをご覧ください。
インスタンスとデータベースを指定する
デフォルトのインスタンスとデータベースを指定するには、アプリケーションの次の構成プロパティを設定します。
| プロパティ | 説明 | 
|---|---|
| spring.cloud.gcp.spanner.project-id | 省略可。 Google Cloud プロジェクト ID spring.cloud.gcp.config.project-idの値をオーバーライドします。 | 
| spring.cloud.gcp.spanner.instance-id | Spanner インスタンス ID | 
| spring.cloud.gcp.spanner.database | 接続先のデータベース。 | 
Spanner データをモデリングする
Spring Data Spanner では、POJO(Plain Old Java Object)を使用して Spanner テーブルに格納するデータをモデリングできます。
データベースの各テーブルに対して、そのテーブル内のレコードを表すエンティティを宣言します。アノテーションを使用して、エンティティとそのプロパティをテーブルとその列にマッピングします。
次のアノテーションを使用して、エンティティとテーブルとのシンプルな関係をモデリングできます。
| エンティティ アノテーション | |
|---|---|
| @Column(name = "columnName") | 省略可。Spanner テーブルの特定の列にプロパティをマッピングし、名前を自動的にマッピングする命名方法をオーバーライドします。 
          このプロパティを省略した場合、Spring Data Spanner のデフォルトの命名方法では、Java の  | 
| @Embedded | 
          プロパティが、主キーのコンポーネントを保持できる埋め込みオブジェクトであることを示します。プロパティを主キーで実際に使用する場合、 | 
| 
           
           | プロパティに、現在の行でインターリーブされる行の一覧が含まれていることを示します。 
          デフォルトでは、Spring Data Spanner はインスタンス作成時にインターリーブされた行をフェッチします。行を必要に応じてフェッチするには、プロパティにアクセスする際に  
          例:  | 
| @NotMapped | プロパティがデータベースに保存されず、無視されることを示します。 | 
| 
           
           | 
          プロパティが主キーのコンポーネントであり、1 から始まる主キー内のプロパティの位置を示します。デフォルトの  
          例:  | 
| @Table(name = "TABLE_NAME") | 
          エンティティによってモデリングされるテーブル。エンティティの各インスタンスは、テーブル内のレコードを表します。 
          例:  | 
より複雑な関係をモデリングする必要がある場合は、モジュールがサポートするその他のアノテーションの詳細について、Spring Data Spanner リファレンスをご覧ください。
以下は、Spring Data Spanner の Singers テーブルと Albums テーブルをモデリングする方法の一例です。
- Singerエンティティの場合、この例では、- @Interleavedアノテーションを使用した- albumsプロパティが含まれます。このプロパティには、- Singerエンティティによってインターリーブされるアルバムの一覧が含まれます。Spring Data Spanner では、このプロパティに自動的に値が設定されます。
- Albumエンティティの場合、この例には Spanner に保存されていない- relatedAlbumsプロパティが含まれます。
データのクエリと変更
Spring Data Spanner を使用してデータをクエリおよび変更するには、SpannerTemplate Bean を取得できます。これは、SpannerOperations を実装します。SpannerTemplate は、データ操作言語(DML)ステートメントによって、SQL クエリを実行し、データを変更する方法を提供します。この Bean を使用して、Spanner の読み取り API と Mutation API にアクセスすることもできます。
また、SpannerRepository インターフェースを拡張し、Spanner でデータをクエリおよび変更するすべてのアプリケーション ロジックをカプセル化できます。
次のセクションでは、SpannerTemplate と SpannerRepository の操作方法を説明します。
テンプレート Bean を取得する
@Autowired アノテーションを使用して、SpannerTemplate Bean を自動的に取得します。その後、クラス全体で SpannerTemplate を使用できます。
次の例は、Bean を取得して使用するクラスを示しています。
SpannerTemplate Bean を使用して、読み取り専用トランザクションと読み取り / 書き込みトランザクションを実行できます。さらに、@Transactional アノテーションを使用して、宣言型トランザクションを作成できます。
リポジトリ Bean を取得する
SpannerRepository を使用する場合、@Autowired アノテーションを使用して、リポジトリのインターフェースを実装する Bean を取得できます。リポジトリには、Java 関数を読み取り専用トランザクションと読み取り / 書き込みトランザクションとして実行するためのメソッドが含まれています。下位レベルのオペレーションでは、リポジトリで使用するテンプレート Bean を取得できます。
次の例は、Bean を取得して使用するリポジトリとクラスのインターフェースを示しています。
Spanner を管理する
Spanner データベースに関する情報を取得したり、データ定義言語(DDL)ステートメントでスキーマを更新したり、他の管理タスクを行ったりするには、SpannerDatabaseAdminTemplate Bean を取得できます。
@Autowired アノテーションを使用して、Bean を自動的に取得します。その後、クラス全体で SpannerDatabaseAdminTemplate を使用できます。
次の例は、Bean を取得して使用するクラスを示しています。
次のステップ
- Spring Cloud GCP を使ってみる。
- アプリケーションでの Spring Data Spanner の使用について詳しく確認する。
- GitHub の issue を作成してバグを報告するか、モジュールについて質問する。
- Google Cloudでの Spring Framework のサポートについて詳しく確認する。
- Spring Cloud GCP を使ったアプリケーションをデプロイして実行するための Codelab を試す。