Inleiding tot Spring Data Azure Cosmos DB

1. Overzicht

In deze zelfstudie leren we over Azure Cosmos DB en hoe we ermee kunnen communiceren met behulp van Spring Data.

2. Azure Cosmos DB

Azure Cosmos DB is de wereldwijd gedistribueerde databaseservice van Microsoft.

Het is een NoSQL-database, dat uitgebreide serviceniveau-overeenkomsten biedt voor doorvoer, latentie, beschikbaarheid en consistentiegaranties. Het verzekert ook een beschikbaarheid van 99,999% voor zowel lees- als schrijfbewerkingen.

Azure Cosmos DB biedt niet slechts twee keuzes voor consistentie, d.w.z. consistent of niet consistent. In plaats daarvan, we krijgen vijf consistente keuzes: sterk, begrensd staaless, sessie, consistent voorvoegsel, en uiteindelijke.

We kunnen zowel de doorvoer als de opslag van Azure Cosmos DB elastisch schalen.

Bovendien is het beschikbaar in alle Azure-regio's en biedt het kant-en-klare wereldwijde distributie, omdat we onze gegevens in alle Azure-regio's kunnen repliceren door op een knop te klikken. Dit helpt ons om onze gegevens dichter bij onze gebruikers te hebben, zodat we hun verzoeken sneller kunnen behandelen.

Het is schema-agnostischomdat het geen schema heeft. Bovendien hoeven we geen indexbeheer uit te voeren voor Azure Cosmos Db. Het indexeert automatisch gegevens voor ons.

We kunnen met Azure CosmosDb werken met behulp van verschillende standaard API's zoals SQL, MongoDB, Cassandra, etc.

3. Spring Data Azure Cosmos DB

Microsoft biedt ook een module waarmee we met behulp van Spring Data met Cosmos DB kunnen werken. In de volgende sectie zullen we zien hoe we Azure Cosmos DB kunnen gebruiken in een Spring Boot-toepassing.

In ons voorbeeld maken we een Spring-webtoepassing die een productentiteit opslaat in een Azure Cosmos-database en er basis CRUD-bewerkingen op uitvoert. Eerst moeten we een account en database configureren in de Azure-portal, volgens de instructies in de documentatie.

Als we geen account willen maken op de Azure-portal, biedt Azure ook de Azure Cosmos-emulator. Ook al bevat dit niet alle functionaliteiten van Azure Cosmos Service en zijn er enkele verschillen, we kunnen het gebruiken voor lokale ontwikkeling en testen.

We kunnen de emulator op twee manieren in onze lokale omgeving gebruiken: ofwel door de Azure Cosmos-emulator op onze computer te downloaden of door de emulator op Docker voor Windows uit te voeren.

We zullen de optie kiezen om het op Docker uit te voeren voor ramen. Laten we de Docker-afbeelding ophalen door de volgende opdracht uit te voeren:

docker pull microsoft / azure-cosmosdb-emulator

Vervolgens kunnen we de Docker-afbeelding uitvoeren en de container starten door de volgende opdrachten uit te voeren:

set containerName = azure-cosmosdb-emulator set hostDirectory =% LOCALAPPDATA% \ azure-cosmosdb-emulator.hostd md% hostDirectory% 2> nul docker run --name% containerName% --memory 2GB --mount "type = bind, source =% hostDirectory%, bestemming = C: \ CosmosDB.Emulator \ bind-mount "-P --interactieve --tty microsoft / azure-cosmosdb-emulator

Nadat we het Azure Cosmos DB-account en de database in de Azure Portal of Docker hebben geconfigureerd, kunnen we doorgaan met configureren in onze Spring Boot-applicatie.

4. Azure Cosmos DB gebruiken in het voorjaar

4.1. Spring Data Azure Cosmos DB configureren met Spring

We beginnen met het toevoegen van de spring-data-cosmosdb-afhankelijkheid in onze pom.xml:

 com.microsoft.azure spring-data-cosmosdb 2.3.0 

Om toegang te krijgen tot Azure Cosmos DB vanuit onze Spring-applicatie, hebben we de URI van onze database nodig, de toegangssleutels en de databasenaam. Vervolgens voegen we de verbindingseigenschappen toe aan ons application.properties:

azure.cosmosdb.uri = cosmodb-uri azure.cosmosdb.key = cosmodb-primaire-sleutel azure.cosmosdb.secondaryKey = cosmodb-secundaire-sleutel azure.cosmosdb.database = cosmodb-naam 

We kunnen de waarden van de bovenstaande eigenschappen vinden in de Azure-portal. De URI, primaire sleutel en de secundaire sleutel zijn beschikbaar in het gedeelte met sleutels van onze Azure Cosmos DB in de Azure-portal.

Om vanuit onze applicatie verbinding te maken met Azure Cosmos DB, moeten we een client maken. Daarom, we moeten uitbreiden AbstractCosmosConfiguration class in onze configuratieklasse en voeg de @EnableCosmosRepositories annotatie.

Deze annotatie scant naar interfaces die de repository-interfaces van Spring Data in het opgegeven pakket uitbreiden.

We moeten ook configureer een soort boon CosmosDBConfig:

@Configuration @EnableCosmosRepositories (basePackages = "com.baeldung.spring.data.cosmosdb.repository") openbare klasse AzureCosmosDbConfiguration breidt AbstractCosmosConfiguration {@Value ("$ {azure.cosmosdb.uri}") privé String uri uit; @Value ("$ {azure.cosmosdb.key}") privé String-sleutel; @Value ("$ {azure.cosmosdb.database}") private String dbName; privé CosmosKeyCredential cosmosKeyCredential; @Bean openbare CosmosDBConfig getConfig () {this.cosmosKeyCredential = nieuwe CosmosKeyCredential (sleutel); CosmosDBConfig cosmosdbConfig = CosmosDBConfig.builder (uri, this.cosmosKeyCredential, dbName) .build (); terug cosmosdbConfig; }}

4.2. Een entiteit maken voor Azure Cosmos DB

Om te communiceren met Azure Cosmos DB maken we gebruik van entiteiten. Laten we dus een entiteit maken die we zullen opslaan in Azure Cosmos DB. Om ons te maken Product een entiteit classificeren, we zullen de @Document annotatie:

@Document (collection = "products") public class Product {@Id private String productid; private String productName; particuliere dubbele prijs; @PartitionKey private String productCategory; }

In dit voorbeeld we hebben de verzameling attribuut met de waarde producten, om aan te geven dat dit de naam is van onze container in de database. Als we geen waarde bieden voor het verzameling parameter, dan wordt de klassenaam gebruikt als de containernaam in de database.

We hebben ook een id voor ons document gedefinieerd. We kunnen ofwel een veld met de naam maken ID kaart in onze klas of we kunnen een veld annoteren met de @ID kaart annotatie. Hier hebben we de Product-ID veld als de document-id.

We kunnen onze gegevens logisch in onze container partitioneren door een partitiesleutel te gebruiken door een veld te annoteren met @PartitionKey. In onze klas hebben we de product categorie veld als de partitiesleutel.

Het indexeringsbeleid wordt standaard gedefinieerd door Azure, maar we kunnen het ook aanpassen met @DocumentIndexingPolicy annotatie op onze entiteitsklasse.

We kunnen ook Optimistische vergrendeling inschakelen voor onze entiteitscontainer door een veld met de naam te maken _etag en annoteren met @Versie.

4.3. De repository definiëren

Nu laten we een Productopslagplaats interface die zich uitbreidt CosmosRepository. Met behulp van deze interface kunnen we CRUD-bewerkingen uitvoeren op onze Azure Cosmos DB:

@Repository openbare interface ProductRepository breidt CosmosRepository uit {List findByProductName (String productName); }

Zoals we kunnen zien, wordt dit op dezelfde manier gedefinieerd als andere Spring Data-modules.

4.4. De verbinding testen

Nu kunnen we een Junit-test maken om een Product entiteit in Azure Cosmos DB met behulp van onze Productopslagplaats:

@SpringBootTest openbare klasse AzureCosmosDbApplicationManualTest {@Autowired ProductRepository productRepository; @Test openbare ongeldig gegevenProductIsCreated_whenCallFindById_thenProductIsFound () {Product product = nieuw product (); product.setProductid ("1001"); product.setProductCategory ("Shirt"); product.setPrice (110,0); product.setProductName ("Blauw shirt"); productRepository.save (product); Product retrievedProduct = productRepository.findById ("1001", nieuwe PartitionKey ("Shirt")) .orElse (null); Assert.notNull (retrievedProduct, "Retrieved Product is Null"); }}

Door deze Junit-test uit te voeren, kunnen we onze verbinding met Azure Cosmos DB testen vanuit onze Spring-applicatie.

5. Conclusie

In deze zelfstudie hebben we geleerd over Azure Cosmos DB. Verder hebben we geleerd hoe u toegang krijgt tot Azure Cosmos DB vanuit een Spring Boot-toepassing, hoe u entiteiten maakt en een opslagplaats configureert door uit te breiden CosmosRepository om ermee te communiceren.

De code voor het bovenstaande voorbeeld is beschikbaar op GitHub.