Cassandra: http://cassandra.apache.org/doc/latest/ SpringDataCassandra: https://spring.io/projects/spring-data-cassandra Eigenschaft Einstellungselement: https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#data-properties
Installation
#Cassandra Körper
brew install cassandra
# CQL(Cassandra Query Language)
brew install cql
Anlaufen
cassandra -f
Connection error: ('Unable to connect to any servers', {'127.0.0.1': error(61, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})
Es bewegt sich nicht. .. .. In meinem Fall sollte JAVA_HOME anscheinend nicht auf das Java 11-Verzeichnis verweisen. .. .. Nach der Neudefinition startet es sicher!
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/
cassandra -f
Beginnen Sie trotzdem mit Homebrew!
vi /usr/local/etc/cassandra/cassandra-env.sh
#"JAVA exportieren" am Ende_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/Hinzugefügt
brew services start cassandra
Verbinden!
cqlsh
cqlsh localhost 9042 Mit diesem
cqlsh
Von hier aus fortfahren Die Erläuterung detaillierter Optionen entfällt hier. .. ..
Konzept entsprechend der Datenbank in MySQL und Oracle
-- #Vor dem Hinzufügen des Schlüsselraums
DESCRIBE keyspaces
-- system_traces system_schema system_auth system system_distributed
-- #"Beispiel" -Schlüsselraum hinzugefügt
CREATE KEYSPACE sample WITH REPLICATION = {'class':'SimpleStrategy','replication_factor':1};
-- #Vor dem Hinzufügen des Schlüsselraums
DESCRIBE keyspaces
-- system_schema system_auth system sample system_distributed system_traces
Die Löschung ist übrigens
DROP KEYSPACE sample;
USE sample
Hier nehmen wir einfach Daten mit Schlüssel und Wert an.
--Erstellen
CREATE TABLE t_sample (key text PRIMARY KEY, value text);
--Überprüfen Sie die Liste
DESCRIBE tables;
--Überprüfen Sie die Tabellendefinition
DESCRIBE table t_sample;
Die Löschung ist übrigens
DROP TABLE t_sample;
Verwenden der zuvor erstellten Tabelle t_sample
--Referenz (leer)
select * from t_sample;
--Referenz (entspricht oben)
select key, value from t_sample;
--Anmeldung
INSERT INTO t_sample (key, value) VALUES ('key1', 'value1');
--Registrierung (Duplikat)
--Die Abfrage ist erfolgreich und verhält sich wie ein Update
INSERT INTO t_sample (key, value) VALUES ('key1', 'value2');
--aktualisieren
UPDATE t_sample SET value = 'value3' WHERE key = 'key1';
--Löschen
DELETE FROM t_sample WHERE key = 'key1';
Es ist meine erste Erfahrung, aktualisiert zu werden, anstatt gespielt zu werden, wenn ich gegen die Grundschule verstoße
build.gradle
plugins {
id 'org.springframework.boot' version '2.2.4.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-cassandra'
//Webflux dient zur Funktionsprüfung
implementation 'org.springframework.boot:spring-boot-starter-webflux'
compileOnly('org.projectlombok:lombok')
annotationProcessor('org.projectlombok:lombok')
}
application.yml
spring:
data:
cassandra:
keyspace-name: sample
Sample.java
import lombok.Value;
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;
@Data
@Table("t_sample")
public class Sample {
@PrimaryKey
private String key;
private String value;
}
Application.java
@Slf4j
@SpringBootApplication
public class Application {
public static void main(String[] args) {
//SpringApplication.run(Application.class);
Cluster cluster = Cluster.builder()
.addContactPoints("localhost")
.withoutJMXReporting() //Fehler, wenn nicht angehängt
.build();
Session session = cluster.connect("sample");
var template = new CassandraTemplate(session);
var data = new Sample("key1", "value1");
template.insert(data);
//Suche alle
var selected = template.select("SELECT * from t_sample", Sample.class);
log.info("selected: {}", selected);
//aktualisieren
data = new Sample("key1", "value2");
template.update(data);
//Bedingte Suche
selected = template.select(Query.query(Criteria.where("key").is("key1")), Sample.class);
log.info("selected: {}", selected);
//Löschen (PK angegeben)
template.deleteById("key1", Sample.class);
//Holen Sie sich die Nummer
var count = template.count(Sample.class);
log.info("count: {}", count);
//Verbindung geschlossen
session.close();
cluster.close();
}
}
Der folgende Fehler ist aufgetreten, es sei denn, ".withoutJMXReporting ()" wurde beschrieben.
Exception in thread "main" java.lang.NoClassDefFoundError: com/codahale/metrics/JmxReporter
Untersuchen Sie zunächst, wie viel "Spring-Boot-Starter-Data-Cassandra" Bohnen registriert
Cluster
--org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration
ist als Bean registriert
spring.data.cassandra
festzulegen
--spring.data.cassandra.keyspace-name = sample
Session
――Ist es eine Sitzung oder eine Sitzungsfabrik?
--org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration
ist als Bean registriert
CassandraTemplate
Fazit ... Verwenden Sie plötzlich Cassandra Template und es ist in Ordnung!
CassandraController.java
@RequiredArgsConstructor
@RestController
public class CassandraController {
private final CassandraTemplate template;
// curl localhost:8080
@GetMapping("")
public List<Sample> all() {
return template.select("SELECT * FROM t_sample", Sample.class);
}
// curl localhost:8080/key1
@GetMapping("/{key}")
public Sample getByKey(@PathVariable String key) {
return template.selectOneById(key, Sample.class);
}
// curl localhost:8080/insert -d '{"key":"key1","value":"value1"}' -X PATCH -H 'Content-Type: application/json'
@PatchMapping("/**")
public Sample patch(@RequestBody Sample sample) {
return template.insert(sample);
}
// curl localhost:8080/key1 -X DELETE
@DeleteMapping("/{key}")
public Boolean delete(@PathVariable String key) {
return template.deleteById(key, Sample.class);
}
}
Verwenden Sie einfach ReactiveCassandraTemplate! Vergessen Sie nicht, den Rückgabetyp auf Flux oder Mono zu ändern! (Es ist auch als Verlag sofort in Ordnung)
ReactiveCassandraController.java
@RequiredArgsConstructor
@RestController
@RequestMapping("/reactive")
public class ReactiveCassandraController {
private final ReactiveCassandraTemplate template;
// curl localhost:8080/reactive
@GetMapping("")
public Flux<Sample> all() {
return template.select("SELECT * FROM t_sample", Sample.class);
}
// curl localhost:8080/reactive/key1
@GetMapping("/{key}")
public Mono<Sample> getByKey(@PathVariable String key) {
return template.selectOneById(key, Sample.class);
}
// curl localhost:8080/reactive/insert -d '{"key":"key1","value":"value1"}' -X PATCH -H 'Content-Type: application/json'
@PatchMapping("/**")
public Mono<Sample> patch(@RequestBody Sample sample) {
return template.insert(sample);
}
// curl localhost:8080/reactive/key1 -X DELETE
@DeleteMapping("/{key}")
public Mono<Boolean> delete(@PathVariable String key) {
return template.deleteById(key, Sample.class);
}
}
Recommended Posts