13.2.2 创建响应式 Cassandra Repository
到目前为止,您可能已经期望响应式 Cassandra Repository 与等效的非响应性 Repository 看起来是一样的。如果是这样,那真是太好了!您跟上了 Spring Data 的步伐。无论 Repository 是否是响应式的,都尽可能的使用类似的编程模型。
您可能已经猜到了,使 Repository 是响应式的,主要就是扩展 ReactiveCrudRepository 接口。如下图中的 IngredientRepository 所示:
package tacos.data;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import tacos.Ingredient;
public interface IngredientRepository
extends ReactiveCrudRepository<Ingredient, String> {
}
当然,OrderRepository 也是如此:
package tacos.data;
import java.util.UUID;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.reactive.ReactiveCrudRepository;
import reactor.core.publisher.Flux;
import tacos.TacoOrder;
import tacos.User;
public interface OrderRepository
extends ReactiveCrudRepository<TacoOrder, UUID> {
Flux<TacoOrder> findByUserOrderByPlacedAtDesc(
User user, Pageable pageable);
}
事实上,这些 Repository 不仅让人联想到它们的非响应式对应库,它们与我们在本章前面编写的 MongoDB Repository 也没有太大区别。除了 Cassandra 使用 UUID 作为 ID 类型,而不是 TacoOrder 的字符串,它们实际上是完全相同的。这再次证明了 Spring Data 中采用的一致性设计思想(尽可能的)。
让我们通过编写几个测试,来结束编写响应式 Cassandra Repository 的工作,并验证它们是否有效。