Reactive Elasticsearch 存储库
Reactive Elasticsearch 存储库支持基于 存储库 中解释的核心存储库支持,利用 Reactive Elasticsearch 操作 提供的操作,由 Reactive REST 客户端 执行。
Spring Data Elasticsearch reactive 存储库支持使用 Project Reactor 作为其首选的 reactive 组合库。
有 3 个主要接口可供使用
-
ReactiveRepository
-
ReactiveCrudRepository
-
ReactiveSortingRepository
用法
要使用 Repository
访问存储在 Elasticsearch 中的域对象,只需为其创建一个接口即可。在实际操作之前,您需要一个实体。
示例 1. 样本
Person
实体public class Person {
@Id
private String id;
private String firstname;
private String lastname;
private Address address;
// … getters and setters omitted
}
请注意,id 属性的类型必须为 String 。
|
示例 2. 用于持久化 Person 实体的基本存储库接口
interface ReactivePersonRepository extends ReactiveSortingRepository<Person, String> {
Flux<Person> findByFirstname(String firstname); (1)
Flux<Person> findByFirstname(Publisher<String> firstname); (2)
Flux<Person> findByFirstnameOrderByLastname(String firstname); (3)
Flux<Person> findByFirstname(String firstname, Sort sort); (4)
Flux<Person> findByFirstname(String firstname, Pageable page); (5)
Mono<Person> findByFirstnameAndLastname(String firstname, String lastname); (6)
Mono<Person> findFirstByLastname(String lastname); (7)
@Query("{ \"bool\" : { \"must\" : { \"term\" : { \"lastname\" : \"?0\" } } } }")
Flux<Person> findByLastname(String lastname); (8)
Mono<Long> countByFirstname(String firstname) (9)
Mono<Boolean> existsByFirstname(String firstname) (10)
Mono<Long> deleteByFirstname(String firstname) (11)
}
1 | 该方法显示了对具有给定 lastname 的所有人的查询。 |
2 | 查找器方法等待来自 Publisher 的输入,以绑定 firstname 的参数值。 |
3 | 查找器方法按 lastname 对匹配的文档进行排序。 |
4 | 查找器方法按通过 Sort 参数定义的表达式对匹配的文档进行排序。 |
5 | 使用 Pageable 将偏移量和排序参数传递到数据库。 |
6 | 使用 And / Or 关键字连接条件的查找器方法。 |
7 | 查找第一个匹配的实体。 |
8 | 该方法显示了对所有具有给定 lastname 的人员的查询,通过运行带给定参数的带注释的 @Query 来查找。 |
9 | 计算所有具有匹配 firstname 的实体。 |
10 | 检查是否存在至少一个具有匹配 firstname 的实体。 |
11 | 删除所有具有匹配 firstname 的实体。 |
配置
对于 Java 配置,使用 @EnableReactiveElasticsearchRepositories
注释。如果未配置基本包,则基础设施将扫描带注释的配置类的包。
以下清单显示了如何将 Java 配置用于存储库
示例 3. 存储库的 Java 配置
@Configuration
@EnableReactiveElasticsearchRepositories
public class Config extends AbstractReactiveElasticsearchConfiguration {
@Override
public ReactiveElasticsearchClient reactiveElasticsearchClient() {
return ReactiveRestClients.create(ClientConfiguration.localhost());
}
}
由于前一个示例中的存储库扩展了 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")));
// ...
}
}