リアクティブ Couchbase リポジトリ
導入
この章では、couchbase のリアクティブリポジトリサポートについて説明します。これは、Couchbase リポジトリで説明されているコアリポジトリサポートに基づいています。そこで説明されている基本概念をしっかりと理解していることを確認してください。
リアクティブ組成物 ライブラリ
Couchbase Java SDK 3.x は RxJava から Reactor に移行したため、リアクティブ Spring エコシステムと非常にうまく調和しています。
リアクティブ Couchbase リポジトリは、プロジェクト Reactor ラッパー型を提供し、ライブラリ固有のリポジトリインターフェースの 1 つから単純に拡張するだけで使用できます。
ReactiveCrudRepository
ReactiveSortingRepository
使用方法
まずは簡単なエンティティを作成しましょう。
public class Person {
@Id
private String id;
private String firstname;
private String lastname;
private Address address;
// … getters and setters omitted
}
対応するリポジトリの実装は次のようになります。
public interface ReactivePersonRepository extends ReactiveSortingRepository<Person, Long> {
Flux<Person> findByFirstname(String firstname);
Flux<Person> findByFirstname(Publisher<String> firstname);
Flux<Person> findByFirstnameOrderByLastname(String firstname, Pageable pageable);
Mono<Person> findByFirstnameAndLastname(String firstname, String lastname);
}
JavaConfig の場合は、@EnableReactiveCouchbaseRepositories
アノテーションを使用します。アノテーションは、名前空間要素とまったく同じ属性を持ちます。基本パッケージが構成されていない場合、インフラストラクチャーはアノテーション付き構成クラスのパッケージをスキャンします。
また、spring boot セットアップで使用している場合は、アノテーションが自動的に設定されるため、このアノテーションを省略できる可能性があることにも注意してください。
@Configuration
@EnableReactiveCouchbaseRepositories
class ApplicationConfig extends AbstractCouchbaseConfiguration {
// ... (see configuration for details)
}
ドメインリポジトリは ReactiveSortingRepository
を継承するため、エンティティへの並べ替えられたアクセスのメソッドだけでなく、CRUD 操作も提供します。リポジトリインスタンスの操作は、依存関係をクライアントに注入するだけの問題です。
public class PersonRepositoryTests {
@Autowired
ReactivePersonRepository repository;
@Test
public void sortsElementsCorrectly() {
Flux<Person> persons = repository.findAll(Sort.by(new Order(ASC, "lastname")));
assertNotNull(perons);
}
}
リポジトリとクエリ
Spring Data のリアクティブ Couchbase には、ブロッキングリポジトリとクエリによってすでに提供されている完全なクエリサポートが付属しています。