インストールと構成

この章では、ライブラリを使用するときに必要な一般的なインストールと構成の手順について説明します。

インストール

運用環境での使用を目的としたすべてのバージョンは、Maven Central と Spring リリースリポジトリに配布されます。その結果、ライブラリは他の maven 依存関係と同様に含めることができます。

互換性

The simplest way to get the correct dependencies is by making a project with spring initializr The parent Spring Boot Starter artfacts have the required dependencies, they do not need to be specified.

Spring Boot バージョンの互換性

  • Spring Boot 3.4.* は Spring Data Couchbase 5.4.* を使用します。

  • Spring Boot 3.3.* は Spring Data Couchbase 5.3.* を使用します。

  • Spring Boot 3.2.* は Spring Data Couchbase 5.2.* を使用します。

Couchbase Java SDK 互換性

  • Spring Data Couchbase 5.4.* depends on Couchbase Java SDK 3.7.*

  • Spring Data Couchbase 5.3.* depends on Couchbase Java SDK 3.6.*

  • Spring Data Couchbase 5.2.* depends on Couchbase Java SDK 3.3.*

構成

例 1: maven を介した依存関係を含める
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-couchbase</artifactId>
    <version>5.4.0</version>
</dependency>

これにより、基盤となる Couchbase Java SDK、一般的な Spring 依存関係、さらに JSON マッピングインフラストラクチャとしての Jackson など、いくつかの依存関係が取り込まれます。

Spring スナップショットリポジトリ (英語) (https://repo.spring.io/snapshot ) からスナップショットを取得したり、Spring マイルストーンリポジトリ (英語) (https://repo.spring.io/milestone ) からマイルストーンリリースを取得したりすることもできます。現在の SNAPSHOT 依存関係の使用方法の例を次に示します。

スナップショット構成

例 2: スナップショットバージョンの使用
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-couchbase</artifactId>
  <version>${version}-SNAPSHOT</version>
</dependency>

<repository>
  <id>spring-snapshot</id>
  <name>Spring Snapshot Repository</name>
  <url>https://repo.spring.io/snapshot</url>
</repository>

Couchbase SDK バージョンのオーバーライド

ユーザーによっては、バグや脆弱性の修正を取得するために、Spring Data Couchbase リリースで参照されているバージョンとは異なる Couchbase Java SDK バージョンの使用を希望する場合があります。Couchbase Java SDK マイナーバージョンリリースには下位互換性があるため、このバージョンの Spring Data Couchbase は、リリースの依存関係で指定されているものより新しい Couchbase Java SDK の 3.x バージョンと互換性があり、サポートされます。Spring Data Couchbase で使用される Couchbase Java SDK バージョンを変更するには、次のようにアプリケーション pom.xml の依存関係をオーバーライドするだけです。

例 3: spring-data-couchbase 依存関係を直接使用する場合
<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-couchbase</artifactId>
  <version>${version}</version>
  <exclusions> <!-- exclude Couchbase Java SDK -->
    <exclusion>
      <groupId>com.couchbase.client</groupId>
      <artifactId>java-client</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency> <!-- add dependency for specific Couchbase Java SDK version -->
  <groupId>com.couchbase.client</groupId>
  <artifactId>java-client</artifactId>
  <version>3.4.7</version>
</dependency>
例 4: spring-data-starter-couchbase 依存関係を使用する場合 (Spring イニシャル zr から)
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>x.y.z</version>
  <relativePath/>
</parent>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-couchbase</artifactId>
  <exclusions> <!-- exclude Couchbase Java SDK -->
    <exclusion>
      <groupId>com.couchbase.client</groupId>
      <artifactId>java-client</artifactId>
    </exclusion>
  </exclusions>
</dependency>

<dependency> <!-- add dependency for specific Couchbase Java SDK version -->
  <groupId>com.couchbase.client</groupId>
  <artifactId>java-client</artifactId>
  <version>3.4.7</version>
</dependency>

クラスパス上で必要な依存関係をすべて取得したら、クラスパスの構成を開始できます。Java 構成のみがサポートされています (XML 構成は 4.0 では削除されています)。

アノテーションベースの構成 ("JavaConfig" )

開始するには、AbstractCouchbaseConfiguration をサブクラス化し、抽象メソッドを実装するだけです。

例 5: AbstractCouchbaseConfiguration の延長
@Configuration
public class Config extends AbstractCouchbaseConfiguration {

    @Override
    public String getConnectionString() {
        return "couchbase://127.0.0.1";
    }

    @Override
    public String getUserName() {
        return "Administrator";
    }

    @Override
    public String getPassword() {
        return "password";
    }

    @Override
    public String getBucketName() {
        return "travel-sample";
    }
}

接続文字列は、上記のコードに示すように、ホストのリストとオプションのスキーム (couchbase://) で構成されます。提供する必要があるのは、ブートストラップする Couchbase ノードのリスト ( , で区切られる) だけです。開発では 1 つのホストで十分ですが、ここでは 3 ~ 5 つのブートストラップノードを追加することをお勧めします。Couchbase はクラスターからすべてのノードを自動的に選択しますが、アプリケーションの起動中に、指定した唯一のノードで問題が発生する場合があります。

userName および password は、RBAC (ロールベースのアクセス制御) を通じて Couchbase サーバークラスター内で構成されます。bucketName は、この構成に使用するバケットを反映します。

さらに、ClusterEnvironment.Builder を受け取って構成された ClusterEnvironment を返す configureEnvironment メソッドをオーバーライドすることで、SDK 環境を調整できます。

この構成からさらに多くのものをカスタム Bean としてカスタマイズおよびオーバーライドできます (リポジトリ、検証、カスタムコンバーターなど)。

SyncGateway および CouchbaseMobile を使用する場合、_ という接頭辞が付いているフィールドで問題が発生する可能性があります。Spring Data Couchbase はデフォルトで型情報を _class 属性として保存するため、これが問題となる可能性があります。typeKey() をオーバーライドして (たとえば、MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE を返す)、上記の属性の名前を変更します。

アプリケーションを起動すると、Couchbase INFO レベルのログがログに記録され、基盤となる Couchbase Java SDK がデータベースに接続していることが示されます。エラーが報告された場合は、指定された資格情報とホスト情報が正しいことを確認してください。

複数のバケットの構成

マルチバケットリポジトリを利用するには、Config クラスに以下のメソッドを実装します。config*OperationsMapping メソッドは、エンティティオブジェクトのバケットへのマッピングを構成します。メソッド名には注意してください。Bean のメソッド名を使用すると、メソッドの結果の代わりに Bean の値が使用されます。

この例では、Person → protected、User → mybucket がマップされ、その他はすべて getBucketName() に送られます。これはリポジトリを介して呼び出しのみをマッピングすることに注意してください。

@Override
public void configureReactiveRepositoryOperationsMapping(ReactiveRepositoryOperationsMapping baseMapping) {
 try {
  ReactiveCouchbaseTemplate personTemplate = myReactiveCouchbaseTemplate(myCouchbaseClientFactory("protected"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(Person.class,  personTemplate); // Person goes in "protected" bucket
  ReactiveCouchbaseTemplate userTemplate = myReactiveCouchbaseTemplate(myCouchbaseClientFactory("mybucket"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(User.class,  userTemplate); // User goes in "mybucket"
  // everything else goes in getBucketName()
 } catch (Exception e) {
  throw e;
 }
}
@Override
public void configureRepositoryOperationsMapping(RepositoryOperationsMapping baseMapping) {
 try {
  CouchbaseTemplate personTemplate = myCouchbaseTemplate(myCouchbaseClientFactory("protected"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(Person.class,  personTemplate); // Person goes in "protected" bucket
  CouchbaseTemplate userTemplate = myCouchbaseTemplate(myCouchbaseClientFactory("mybucket"),new MappingCouchbaseConverter());
  baseMapping.mapEntity(User.class,  userTemplate); // User goes in "mybucket"
  // everything else goes in getBucketName()
 } catch (Exception e) {
  throw e;
 }
}

// do not use reactiveCouchbaseTemplate for the name of this method, otherwise the value of that bean
// will be used instead of the result of this call (the client factory arg is different)
public ReactiveCouchbaseTemplate myReactiveCouchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
  MappingCouchbaseConverter mappingCouchbaseConverter) {
 return new ReactiveCouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter);
}

// do not use couchbaseTemplate for the name of this method, otherwise the value of that been
// will be used instead of the result from this call (the client factory arg is different)
public CouchbaseTemplate myCouchbaseTemplate(CouchbaseClientFactory couchbaseClientFactory,
  MappingCouchbaseConverter mappingCouchbaseConverter) {
 return new CouchbaseTemplate(couchbaseClientFactory, mappingCouchbaseConverter);
}

// do not use couchbaseClientFactory for the name of this method, otherwise the value of that bean will
// will be used instead of this call being made ( bucketname is an arg here, instead of using bucketName() )
public CouchbaseClientFactory myCouchbaseClientFactory(String bucketName) {
 return new SimpleCouchbaseClientFactory(getConnectionString(),authenticator(), bucketName );
}