[JAVA] Cassandra x Spring Boot Kampfrekord

Zusammenfassung dieses Artikels

Referenz

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

Cassandra bauen

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

Lass uns Cassandra für einen Moment alleine spielen

cqlsh

Von hier aus fortfahren Die Erläuterung detaillierter Optionen entfällt hier. .. ..

Fügen Sie KeySpace hinzu

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;

Datenbank verschieben

USE sample

Eine Tabelle erstellen

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;

Datenmanipulation

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

Erstellen Sie die Spring-Anwendung

Projekterstellung

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

Modellklasse für Tabelle erstellen

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;
}

Versuchen Sie, sich zu registrieren / zu referenzieren / zu löschen

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

Versuchen Sie, es wie eine Webanwendung aussehen zu lassen

Untersuchen Sie zunächst, wie viel "Spring-Boot-Starter-Data-Cassandra" Bohnen registriert

Cluster

--org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration ist als Bean registriert

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);
    }
}

Reaktive Unterstützung

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

Cassandra x Spring Boot Kampfrekord
SPRING BOOT Lernaufzeichnung 01
SPRING BOOT Lernprotokoll 02
Einstellungen für den Spring Boot 2.x-Kontextpfad
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Fordern Sie Spring Boot heraus
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Servlet-Filter mit Spring Boot verwenden [Spring Boot 1.x, 2.x kompatibel]
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Konstruktionsverfahren für LINE Bot x Java (Spring Boot)
Frühlingsstiefel + Heroku Postgres
Schreiben von Frühlingsstiefel-Memos (1)
Ein Memorandum über die Sucht nach Spring Boot2 x Doma2
Erster Frühlingsstiefel (DI)
Spring Boot2 Spickzettel
Spring Boot-Ausnahmebehandlung
Spring Boot Servlet-Zuordnung
Spring Boot Entwicklung-Entwicklungsumgebung-
Spring Boot-Lernverfahren
SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung
Spring Boot lernen [Anfang]
Schreiben von Spring Boot-Memos (2)
Spring Boot 2.2 Dokumentzusammenfassung
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Spring Boot 2.3 Verfügbarkeit von Anwendungen
Spring Boot Tutorials Themen
Mit Spring Boot herunterladen
Spring Boot 1.x wird im nächsten Jahr EOL erreichen.
[Spring Boot] Umgebungskonstruktion (macOS)
Legen Sie den Kontextparameter in Spring Boot fest
Versuchen Sie Spring Boot von 0 bis 100.
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Aufgabenplan für das Spring Boot Tutorial
Spring 5 & Spring Boot 2 Praktisches Vorbereitungsverfahren
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Spring Boot 2 Multiprojekt mit Gradle
[Spring Boot] Erstellung von Webanwendungen
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Spring Boot Hot Swapping-Einstellungen
[Java] Thymeleaf Basic (Spring Boot)
Einführung in Spring Boot ~ ~ DI ~
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Einführung in Spring Boot ② ~ AOP ~
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Spring Boot beginnend mit Docker
Spring Boot + Springfox Springfox-Boot-Starter 3.0.0 Verwendung
Tipps zur Spring Boot DB
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
[Spring Boot] Einfaches Rezept für den Paging-Prozess
Verwenden Sie Spring JDBC mit Spring Boot
Aufbau der Docker x Spring Boot-Umgebung
Wichtige Änderungen in Spring Boot 1.5