跳到主要内容

响应式 Couchbase 仓库

ChatGPT-4o-mini 中英对照 Reactive Couchbase repository

介绍

本章描述了Couchbase的响应式存储库支持。这是在Couchbase 存储库中解释的核心存储库支持基础上构建的。因此,请确保您已充分理解那里解释的基本概念。

Reactive Composition Libraries

Couchbase Java SDK 3.x 从 RxJava 转移到了 Reactor,因此它与反应式 Spring 生态系统非常契合。

反应式 Couchbase 存储库提供了项目 Reactor 包装类型,可以通过简单地从库特定的存储库接口之一扩展来使用:

  • ReactiveCrudRepository

  • ReactiveSortingRepository

用法

让我们从创建一个简单的实体开始:

示例 1. 示例人物实体

public class Person {

@Id
private String id;
private String firstname;
private String lastname;
private Address address;

// … getters and setters omitted
}
java

一个相应的仓库实现可能如下所示:

示例 2. 基本仓库接口用于持久化 Person 实体

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);
}
none

对于 JavaConfig,使用 @EnableReactiveCouchbaseRepositories 注解。该注解具有与命名空间元素完全相同的属性。如果没有配置基础包,基础设施将扫描注解配置类的包。

另请注意,如果你在 Spring Boot 设置中使用它,你可能可以省略该注解,因为它已经为你自动配置。

示例 3. 存储库的 JavaConfig

@Configuration
@EnableReactiveCouchbaseRepositories
class ApplicationConfig extends AbstractCouchbaseConfiguration {
// ... (see configuration for details)
}
java

由于我们的领域仓库扩展了 ReactiveSortingRepository,它为您提供了 CRUD 操作以及对实体的排序访问方法。使用仓库实例仅仅是将其依赖注入到客户端中。

示例 4. 对 Person 实体的排序访问

public class PersonRepositoryTests {

@Autowired
ReactivePersonRepository repository;

@Test
public void sortsElementsCorrectly() {
Flux<Person> persons = repository.findAll(Sort.by(new Order(ASC, "lastname")));
assertNotNull(perons);
}
}
java

存储库和查询

Spring Data 的 Reactive Couchbase 已经提供了完整的查询支持,这些查询由阻塞的 Repositories and Querying 提供。