Sie können mehr über den Kurs erfahren, indem Sie sich die Aufzeichnung des Tages der offenen Tür ansehen .
Spring Data Neumann ist die erste Veröffentlichung seit dem Übergang zu einem neuen sechsmonatigen Veröffentlichungszyklus. Wenn wir die Zeit zwischen den Veröffentlichungen verkürzen, können wir häufiger neue Funktionen veröffentlichen, was Sie wiederum ebenfalls beschleunigt. In dieser Version gibt es neben neuen Funktionen auch wichtige Änderungen, die möglicherweise die Kompatibilität mit früheren Versionen beeinträchtigen.
Hauptversionen ändern
Für die unten aufgeführten Projekte wurde die Hauptversionsnummer aufgrund von Änderungen erhöht, die die Kompatibilität in öffentlichen APIs oder Treibern beeinträchtigen:
- Spring Data JDBC 2.0 (vorherige Version 1.1)
- Die Migration von 1.1 auf 2.0 wird in diesem Beitrag beschrieben .
- Spring Data MongoDB 3.0 (vorherige Version 2.2)
- Frühlingsdaten für Apache Cassandra 3.0 (vorherige Version 2.2)
- Spring Data Couchbase 4.0 (Vorgängerversion 3.2)
- Spring Data Elasticsearch 4.0 (vorherige Version 3.2)
- Einzelheiten zu den Änderungen finden Sie in diesem Beitrag .
Bevor wir mit der Beschreibung der neuen Funktionalität fortfahren, werfen wir einen Blick auf die Änderungen in der API. Weitere Informationen finden Sie in den Abschnitten zum Aktualisieren in der Dokumentation der jeweiligen Module.
Wenn Sie jetzt nicht bereit sind, ein Update durchzuführen, beachten Sie, dass die vorherige Moore-Version weitere zwölf Monate unterstützt wird.
JDBC
Jeder SQL-Speicher hat seine eigenen Eigenschaften, die einen speziellen Ansatz erfordern. Um ihre Unterstützung zu verbessern, wurden Änderungen vorgenommen, die die Zunahme der Hauptversion beeinflussten. Nun
AbstractJdbcConfigurationversucht standardmäßig, um ihn zu identifizieren DialectDatenbanken gegeben DataSourceoder registriert DialectResolver. Standardmäßig enthält das JDBC-Modul Dialekte für H2, HSQLDB, MySQL, Postgres, MariaDB, Microsoft SQL Server und DB2. Spring Data JDBC maskiert jetzt standardmäßig alle Tabellen- und Spaltennamen. Dies kann dazu führen, dass Sie Ihre CREATE TABLEoder Anmerkungen ändern @Column. Dies gibt Ihnen jedoch mehr Flexibilität beim Benennen von Objekten.
MongoDB
Das einzelne JAR mit Treibern für MongoDB (Mongo-Java-Treiber) ist in mehrere unterteilt: -sync und -reactivestreams, sodass Sie nur den Treiber auswählen können, den Sie benötigen. Das heißt, sowohl die synchronen als auch die reaktiven MongoDB-Treiber sind jetzt optionale Abhängigkeiten, die manuell hinzugefügt werden müssen. Bei der Migration auf neue Treiber wurden einige der bereits veralteten APIs dauerhaft entfernt, was sich auf Konfigurationsklassen wie die
AbstractMongoConfigurationvon Spring Data bereitgestellten XML-Namespaces auswirkte . Weitere Informationen finden Sie im Abschnitt zum Upgrade in der Dokumentation.
Apache Cassandra
Das längst überfällige Update der Apache Cassandra-Treiber auf 4.0 aktualisiert nicht nur die Paket- und Datenstruktur, sondern ändert auch das Verhalten im Cluster und in der Sitzungsbehandlung. Dies hat zu wesentlichen Konfigurationsänderungen geführt, die sich auf die XML-Konfiguration auswirken und sich auf die Konfiguration im Code für einige komplexe Szenarien auswirken können (schwieriger als eine einfache Standardeinstellung
AbstractCassandraConfiguration).
Couchbase
Nach dem Couchbase SDK haben wir ein Upgrade von Version 3.x auf 4.x durchgeführt, wodurch automatische Indexverwaltung und Transaktionsunterstützung hinzugefügt wurden. Lesen Sie mehr im Couchbase-Blog .
Elasticsearch
Unterstützung für HTTP-Client-API, SSL und Proxy hinzugefügt. Es wurden auch eine Reihe von Änderungen vorgenommen, einschließlich der Optimierung und Entfernung der veralteten API, die die Änderung der Hauptversionsnummer beeinflussten. Das Elasticsearch Modul enthält jetzt Dokument, das enthält
Get-, Index-und Search-Requests, die Sie Typen verwenden können wie SearchHit, SearchHitsund SearchPage.
Kommen wir nun zu Innovationen.
Repositories mit Unterstützung für Kotlin-Coroutinen
Die Neumann-Version baut weiterhin auf der Unterstützung für Kotlin-Coroutinen auf , die in der vorherigen Moore- Version begonnen wurde, indem Unterstützung für diese in den Repositorys hinzugefügt wurde.
Coroutinen werden über reaktive Spring Data-Repositorys verwaltet. Jetzt können Sie reaktive Abfragemethoden verwenden oder Ihre eigenen angehaltenen Funktionen schreiben.
interface StudentRepository : CoroutineCrudRepository<Student, String> {
suspend fun findOne(id: String): User
fun findByLastname(firstname: String): Flow<Student>
}
@Primary-repositorys und das Schlüsselwort "search"
Diese beiden kleinen Änderungen verbessern das Abrufen von Repository-Beans und die Benennung von Abfragemethoden. Jetzt wird die Annotation
@Primaryin den Schnittstellen-Repositorys in der Bean-Konfiguration berücksichtigt, wodurch der Container Abhängigkeiten auflösen kann. Sie können jetzt "search"ähnlich ein Präfix für Abfragemethoden verwenden "find". Das ist jetzt möglich, Methoden zu schreiben "search...By...", z searchByFirstname.
Obwohl dies für Datenbanken wie Elasticsearch durchgeführt wurde, wollen wir uns ansehen, wie
search...By...Sie R2DBC in Spring Data verwenden können.
Generieren von R2DBC-Abfragen
Bisher hat Spring Data R2DBC Anmerkungen
@Queryfür Abfragemethoden verwendet, mit Ausnahme der Standardmethoden, die über Schnittstellen verfügbar gemacht werden *.Repository. Das Generieren von Anforderungen nach Methodennamen funktioniert jetzt ähnlich wie bei anderen Modulen:
interface StudentRepository extends ReactiveCrudRepository<Student, Long> {
Flux<Student> searchByLastname(String lastname); (1)
}
Dies entspricht:
@Query("select id, firstname, lastname from customer c where c.lastname = :lastname")
Paginierung und Abfragegenerierung für JDBC
Spring Data JDBC 2.0 unterstützt noch mehr relationale Datenbanken. Wir führen jetzt unsere Integrationstests für H2, HSQLDB, MySQL, MariaDB, PostgreSQL und DB2 durch.
Für diese Datenbanken unterstützen wir die Generierung und Paginierung von Abfragen. Zum Beispiel:
interface StudentRepository extends PagingAndSortingRepository<Student, Long> {
Page<Student> findByLastname(String lastname);
}
In dieser Version bewegen wir uns auch weiter in Richtung NoSQL, beginnend mit MongoDB und einer neuen Methode zum Ändern von Dokumenten.
MongoDB-Update-Aggregationen
Diese wichtige Änderung (die in der Moore-Version nicht vollständig vorbereitet wurde) ermöglicht die Verwendung der Aggregationspipeline zum Aktualisieren von Daten. Änderungen können daher komplexe Ausdrücke enthalten, z. B. Bedingungen für Feldwerte, z.
AggregationUpdate update = Aggregation.newUpdate()
.set("average").toValue(ArithmeticOperators.valueOf("tests").avg())
.set("grade").toValue(ConditionalOperators.switchCases(
when(valueOf("average").greaterThanEqualToValue(90)).then("A"),
when(valueOf("average").greaterThanEqualToValue(80)).then("B"),
when(valueOf("average").greaterThanEqualToValue(70)).then("C"),
when(valueOf("average").greaterThanEqualToValue(60)).then("D"))
.defaultTo("F")
);
template.update(Student.class)
.apply(update)
.all();
Außerdem wird Spring Data MongoDB zweifellos von der kürzlich hinzugefügten Unterstützung für eingebettete Objekte in anderen Modulen profitieren.
Unterstützung für eingebettete Typen in Apache Cassandra
Apache Cassandra unterstützt jetzt die eingebettete Typzuordnung, die in Spring Data JDBC seit langem verfügbar ist . Im Domänenmodell werden integrierte Objekte für Wertobjekte verwendet, deren Eigenschaften in einer einzelnen Tabelle gespeichert sind. Im folgenden Beispiel
Student.namebefindet sich über dem Feld eine Anmerkung @Embedded, die bewirkt, dass alle Felder der Klasse Namein einer Tabelle gespeichert werden, Studentdie aus drei Spalten ( student_id, firstnameund lastname) besteht:
public class Student {
@PrimaryKey("student_id")
private String studentId;
@Embedded(onEmpty = USE_NULL)
Name name;
}
public class Name {
private String firstname;
private String lastname;
}
Elasticsearch-Audit
Da in ElasticSearch das Vorhandensein
idkein ausreichendes Kriterium ist, um festzustellen, ob ein Objekt neu ist, müssen während der Implementierung Persistablemithilfe der folgenden Methode zusätzliche Informationen bereitgestellt werden isNew():
@Document(indexName = "person")
public class Person implements Persistable<Long> {
@Id private Long id;
private String lastName;
private String firstName;
@Field(type = Date)
private Instant createdDate;
private String createdBy
@Field(type = Date)
private Instant lastModifiedDate;
private String lastModifiedBy;
@Override
public boolean isNew() {
return id == null || (createdDate == null && createdBy == null);
}
}
Durch das Hinzufügen
@EnableElasticsearchAuditingzur Konfiguration werden dann alle für die Überwachung erforderlichen Komponenten protokolliert.
Neo4j
Spring Data Neo4j unterstützt jetzt die Neo4j 4.0-Abfragesyntax mit Parametern. Die Platzhaltersyntax war zuvor veraltet und wird jetzt vollständig entfernt. Das Modul basiert jetzt auf den neuesten Neo4j-OGM- und Neo4j-Java-Treibern, um die Interoperabilität mit dem neuesten Neo4j zu verbessern.
Es wird auch aktiv an der Unterstützung der Reaktivität für Graphendatenbanken und ihrer Integration in Spring Data mit Neo4j RX gearbeitet (obwohl dies in der aktuellen Version nicht enthalten ist, ist es bereits für die Aufnahme in die nächste Version bereit).
Apache Geode / VMware Tanzu GemFire
Spring Data-Module für Apache Geode und VMware Tanzu GemFire (
spring-data-geodeund spring-data-gemfire) werden unter dem Titel SDG zu einem Projekt zusammengefasst. Apache Geode wurde auf 1.12.0 und GemFire auf 9.10.0 aktualisiert, was wiederum auf Apache Geode 1.12 basiert. Darüber hinaus kompiliert das SDG die JDK-Versionen 8 bis 14. Das
SDG unterstützt jetzt die Veröffentlichung von Autotransaktionsereignissen , wodurch das Cache-Transaktionsereignis aus dem GemFire / Geode-Cache dem entsprechenden ApplicationEvent im Kontext zugeordnet wird.
Es ist jetzt auch möglich, das Senden von Ereignissen auf einem mit SDG konfigurierten AEQ anzuhalten. Wenn Sie GemFire / Geode Locator-basierte Anwendungen mithilfe von SDG-Annotationen erstellen, können
@LocatorApplicationSie diese auch konfigurierenLocator, um eine Verbindung zu anderen Locators herzustellen und so einen hochverfügbaren und ausfallsicheren Cluster zu erstellen.
Erfahren Sie mehr über den Kurs.