Git branch
Cassandra commands
sudo docker run --name test-cassandra -p 9042:9042 -d cassandra:latest
sudo docker run --name test-cassandra-2 --link test-cassandra:cassandra -d cassandra:latest
docker exec -it test-cassandra /bin/bash
cqlsh> CREATE KEYSPACE test WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 } AND DURABLE_WRITES = false;
cqlsh> use test;
cqlsh:test> CREATE TABLE person ( id text PRIMARY KEY, name text );
Person.java
@Data
public class Person {
@PrimaryKey private String id;
private String name;
}
ReactivePersonRepository.java
public interface ReactivePersonRepository extends ReactiveCassandraRepository<Person, String> {}
ReactivePersonService.java
@Service
public class ReactivePersonService {
@Autowired
private ReactivePersonRepository reactivePersonRepository;
public Mono<Person> save(Person person) {
return reactivePersonRepository.save(person);
}
public Mono<Person> findById(String id) {
return reactivePersonRepository.findById(id);
}
public Flux<Person> findAll() {
return reactivePersonRepository.findAll();
}
public Mono<Void> deleteById(String id) {
return reactivePersonRepository.deleteById(id);
}
public Mono<Void> deleteAll() {
return reactivePersonRepository.deleteAll();
}
}
ReactivePersonController.java
@RestController
@RequestMapping("/api/v2/")
public class ReactivePersonController {
@Autowired
private ReactivePersonService reactivePersonService;
@PostMapping(value = "/person", consumes = "application/json")
public Mono<Person> createPerson(@RequestBody Person person) {
System.out.println("create person" + person);
person.setId(UUID.randomUUID().toString());
return reactivePersonService.save(person);
}
@GetMapping(value = "/person")
public Mono<Person> getPerson(@RequestParam String id) {
return reactivePersonService.findById(id);
}
@GetMapping(value = "/persons")
public Flux<Person> getAllPersons() {
return reactivePersonService.findAll();
}
@DeleteMapping("/person/{id}")
public Mono<Void> deletePerson(@PathVariable String id) {
return reactivePersonService.deleteById(id);
}
@DeleteMapping("/persons")
public Mono<Void> deleteAll() {
return reactivePersonService.deleteAll();
}
}