@@ -2,7 +2,7 @@
|
||||
|
||||
This project contains samples of reactive data access features with Spring Data (Cassandra).
|
||||
|
||||
## Reactive Template API usage with `ReactiveCassandraTemplate`
|
||||
## Reactive Template API usage with `ReactiveCassandraTemplate`
|
||||
|
||||
The main reactive Template API class is `ReactiveCassandraTemplate`, ideally used through its interface `ReactiveCassandraOperations`. It defines a basic set of reactive data access operations using [Project Reactor](http://projectreactor.io) `Mono` and `Flux` reactive types.
|
||||
|
||||
@@ -11,18 +11,18 @@ template.insert(Flux.just(new Person("Walter", "White", 50),
|
||||
new Person("Skyler", "White", 45),
|
||||
new Person("Saul", "Goodman", 42),
|
||||
new Person("Jesse", "Pinkman", 27)));
|
||||
|
||||
|
||||
Flux<Person> flux = template.select(select()
|
||||
.from("person")
|
||||
.where(eq("lastname", "White")), Person.class);
|
||||
```
|
||||
|
||||
The test cases in `ReactiveCassandraTemplateIntegrationTest` show basic Template API usage.
|
||||
The test cases in `ReactiveCassandraTemplateIntegrationTest` show basic Template API usage.
|
||||
Reactive data access reads and converts individual elements while processing the stream.
|
||||
|
||||
|
||||
## Reactive Repository support
|
||||
|
||||
|
||||
Spring Data Cassandra provides reactive repository support with Project Reactor and RxJava 1 reactive types. The reactive API supports reactive type conversion between reactive types.
|
||||
|
||||
```java
|
||||
@@ -35,9 +35,9 @@ public interface ReactivePersonRepository extends ReactiveCrudRepository<Person,
|
||||
|
||||
// Accept parameter inside a reactive type for deferred execution
|
||||
Flux<Person> findByLastname(Mono<String> lastname);
|
||||
|
||||
|
||||
Mono<Person> findByFirstnameAndLastname(Mono<String> firstname, String lastname);
|
||||
|
||||
|
||||
@InfiniteStream // Use a tailable cursor
|
||||
Flux<Person> findWithTailableCursorBy();
|
||||
}
|
||||
@@ -50,10 +50,10 @@ public interface RxJava1PersonRepository extends RxJava1CrudRepository<Person, S
|
||||
|
||||
@Query("SELECT * FROM person WHERE firstname = ?0 and lastname = ?1")
|
||||
Single<Person> findByFirstnameAndLastname(String firstname, String lastname);
|
||||
|
||||
|
||||
// Accept parameter inside a reactive type for deferred execution
|
||||
Observable<Person> findByLastname(Single<String> lastname);
|
||||
|
||||
|
||||
Single<Person> findByFirstnameAndLastname(Single<String> firstname, String lastname);
|
||||
|
||||
@InfiniteStream // Use a tailable cursor
|
||||
@@ -72,7 +72,7 @@ More details can be found here: https://wiki.apache.org/cassandra/GettingStarted
|
||||
### Start Cassandra
|
||||
|
||||
```
|
||||
/usr/local/bin/cassandra -f
|
||||
/usr/local/bin/cassandra -f
|
||||
```
|
||||
|
||||
That should be enough to get you started.
|
||||
|
||||
@@ -34,7 +34,11 @@ import org.springframework.data.cassandra.mapping.Table;
|
||||
@Table
|
||||
public class Person {
|
||||
|
||||
@PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED, ordinal = 2) private String firstname;
|
||||
@PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED, ordinal = 1) private String lastname;
|
||||
@PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED, ordinal = 2) //
|
||||
private String firstname;
|
||||
|
||||
@PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED, ordinal = 1) //
|
||||
private String lastname;
|
||||
|
||||
private int age;
|
||||
}
|
||||
|
||||
@@ -4,11 +4,11 @@ This project contains samples of reactive data access features with Spring Data
|
||||
|
||||
## Prerequisites
|
||||
|
||||
MongoDB requires the Reactive Streams driver to provide reactive data access.
|
||||
The Reactive Streams driver maintains its own connections. Using Spring Data MongoDB Reactive support
|
||||
MongoDB requires the Reactive Streams driver to provide reactive data access.
|
||||
The Reactive Streams driver maintains its own connections. Using Spring Data MongoDB Reactive support
|
||||
together with blocking Spring Data MongoDB data access will open multiple connections to your MongoDB servers.
|
||||
|
||||
## Reactive Template API usage with `ReactiveMongoTemplate`
|
||||
## Reactive Template API usage with `ReactiveMongoTemplate`
|
||||
|
||||
The main reactive Template API class is `ReactiveMongoTemplate`, ideally used through its interface `ReactiveMongoOperations`. It defines a basic set of reactive data access operations using [Project Reactor](http://projectreactor.io) `Mono` and `Flux` reactive types.
|
||||
|
||||
@@ -17,16 +17,16 @@ template.insertAll(Flux.just(new Person("Walter", "White", 50),
|
||||
new Person("Skyler", "White", 45),
|
||||
new Person("Saul", "Goodman", 42),
|
||||
new Person("Jesse", "Pinkman", 27)));
|
||||
|
||||
|
||||
Flux<Person> flux = template.find(Query.query(Criteria.where("lastname").is("White")), Person.class);
|
||||
```
|
||||
|
||||
The test cases in `ReactiveMongoTemplateIntegrationTest` show basic Template API usage.
|
||||
The test cases in `ReactiveMongoTemplateIntegrationTest` show basic Template API usage.
|
||||
Reactive data access reads and converts individual elements while processing the stream.
|
||||
|
||||
|
||||
## Reactive Repository support
|
||||
|
||||
|
||||
Spring Data MongoDB provides reactive repository support with Project Reactor and RxJava 1 reactive types. The reactive API supports reactive type conversion between reactive types.
|
||||
|
||||
```java
|
||||
@@ -39,9 +39,9 @@ public interface ReactivePersonRepository extends ReactiveCrudRepository<Person,
|
||||
|
||||
// Accept parameter inside a reactive type for deferred execution
|
||||
Flux<Person> findByLastname(Mono<String> lastname);
|
||||
|
||||
|
||||
Mono<Person> findByFirstnameAndLastname(Mono<String> firstname, String lastname);
|
||||
|
||||
|
||||
@InfiniteStream // Use a tailable cursor
|
||||
Flux<Person> findWithTailableCursorBy();
|
||||
}
|
||||
@@ -54,13 +54,13 @@ public interface RxJava1PersonRepository extends RxJava1CrudRepository<Person, S
|
||||
|
||||
@Query("{ 'firstname': ?0, 'lastname': ?1}")
|
||||
Single<Person> findByFirstnameAndLastname(String firstname, String lastname);
|
||||
|
||||
|
||||
// Accept parameter inside a reactive type for deferred execution
|
||||
Observable<Person> findByLastname(Single<String> lastname);
|
||||
|
||||
|
||||
Single<Person> findByFirstnameAndLastname(Single<String> firstname, String lastname);
|
||||
|
||||
@InfiniteStream // Use a tailable cursor
|
||||
Observable<Person> findWithTailableCursorBy();
|
||||
}
|
||||
```
|
||||
```
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2015 the original author or authors.
|
||||
* Copyright 2016 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
Reference in New Issue
Block a user