如何在ReactiveCrudRepository @Tailable中创建方法

时间:2018-01-25 14:17:36

标签: java spring mongodb spring-data-mongodb

我正在研究如何为MongoDB中的上限集合编写Tailable游标查询的一些教程。我发现我可以使用@Tailable实现此目的。例如,像这样:

public interface ReactiveProductRepository extends ReactiveCrudRepository<Product, String>{

  @Tailable
  Flux<Product> findByName(String name);
}

这就像一个魅力。此外,这也适用于@Query注释(如果是复杂查询)。

但是,如果我想将ReactiveCrudRepository中的某个方法设为Tailable呢?例如,findAll。我能找到的唯一选择是在我的存储库中添加这样的方法:

  @Tailable
  @Query("{}")
  Flux<Product> findAllProducts();

这只是findAll。我想知道:是否应该为内置方法指定@Tailable功能?

有什么想法?有一个类似于TailableRepository的新界面(PagingAndSortingRepository)是否有意义。

2 个答案:

答案 0 :(得分:1)

实际实现支持的存储库方法不能改变其行为或被查询方法覆盖。

您可以声明不带参数的查询方法,并为要用作入口点的所需方法提供default实现:

public interface LoginEventRepository extends ReactiveCrudRepository<LoginEvent, String> {

    @Tailable
    Flux<LoginEvent> findPeopleBy();

    @Override
    default Flux<LoginEvent> findAll(){
        return findPeopleBy();
    }
}

另请参阅here以获取@Tailable无参数查询方法的示例。

答案 1 :(得分:0)

您可以使用findWithTailableCursorBy检索所有记录而无需查询

@Tailable
Flux<Product> findWithTailableCursorBy();