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
テーブルをモデリングする 1 つの方法を示しています。
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 の問題を提出してバグを報告するか、モジュールついて質問する。
- Google Cloud の Spring Framework のサポートに関する詳細を確認する。
- Spring Cloud GCP を使用するアプリケーションをデプロイして実行する Codelab を試す。