此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.5.2! |
响应式 Elasticsearch 存储库
响应式 Elasticsearch 存储库支持建立在存储库中解释的核心存储库支持之上,利用通过响应式 REST 客户端执行的响应式 Elasticsearch作提供的作。
Spring Data Elasticsearch 响应式存储库支持使用 Project Reactor 作为其选择的响应式组合库。
有 3 个主要接口可供使用:
-
ReactiveRepository
-
ReactiveCrudRepository
-
ReactiveSortingRepository
用法
要使用Repository
,只需为它创建一个接口即可。
在您真正继续这样做之前,您需要一个实体。
示例 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 | Finder 方法等待输入Publisher 绑定参数值firstname . |
3 | Finder 方法按以下方式对匹配文档进行排序lastname . |
4 | Finder 方法按通过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")));
// ...
}
}