Introduktion til Spring Data Azure Cosmos DB

1. Oversigt

I denne vejledning lærer vi om Azure Cosmos DB, og hvordan vi kan interagere med det ved hjælp af Spring Data.

2. Azure Cosmos DB

Azure Cosmos DB er Microsofts globalt distribuerede databasetjeneste.

Det er en NoSQL-database, der giver omfattende serviceniveauaftaler for gennemløbs-, ventetid, tilgængelighed og konsistensgarantier. Det sikrer også 99,999% tilgængelighed for både læsning og skrivning.

Azure Cosmos DB giver ikke kun to konsistensvalg, dvs. enten konsistente eller ikke konsistente. I stedet, vi får fem konsistensvalg: stærk, afgrænset stalhed, session, ensartet præfiksog eventuelt.

Vi kan elastisk skalere både gennemstrømning og lagring af Azure Cosmos DB.

Derudover er den tilgængelig i alle Azure-regioner og tilbyder total global distribution, da vi kan replikere vores data i alle Azure-regioner ved blot at klikke på en knap. Dette hjælper os med at have vores data tættere på vores brugere, så vi kan tjene deres anmodninger hurtigere.

Det er skema-agnostiskda det ikke har noget skema. Desuden behøver vi ikke foretage nogen indeksadministration for Azure Cosmos Db. Det indekserer automatisk data for os.

Vi kan arbejde med Azure CosmosDb ved hjælp af forskellige standard API'er såsom SQL, MongoDB, Cassandra osv.

3. Spring Data Azure Cosmos DB

Microsoft leverer også et modul, der giver os mulighed for at arbejde med Cosmos DB ved hjælp af Spring Data. I det næste afsnit vil vi se, hvordan vi kan bruge Azure Cosmos DB i en Spring Boot-applikation.

I vores eksempel opretter vi en Spring-webapplikation, der gemmer en produktenhed i en Azure Cosmos-database og udfører grundlæggende CRUD-operationer på den. Først skal vi konfigurere en konto og en database i Azure-portalen ved at følge instruktionerne i dokumentationen.

Hvis vi ikke ønsker at oprette en konto på Azure-portalen, leverer Azure også Azure Cosmos Emulator. Selvom dette ikke indeholder alle funktionerne i Azure Cosmos Service, og der er nogle forskelle, kan vi bruge det til lokal udvikling og test.

Vi kan bruge emulatoren i vores lokale miljø på to måder: enten ved at downloade Azure Cosmos Emulator på vores maskine eller køre emulatoren på Docker til Windows.

Vi vælger muligheden for at køre den på Docker Til Windows. Lad os trække Docker-billedet ved at køre følgende kommando:

docker pull microsoft / azure-cosmosdb-emulator

Derefter kan vi køre Docker-billedet og starte containeren ved at køre følgende kommandoer:

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

Når vi har konfigureret Azure Cosmos DB-kontoen og databasen i Azure-portalen eller i Docker, kan vi fortsætte med at konfigurere den i vores Spring Boot-applikation.

4. Brug af Azure Cosmos DB om foråret

4.1. Konfiguration af Spring Data Azure Cosmos DB med Spring

Vi starter med at tilføje fjeder-data-cosmosdb-afhængighed i vores pom.xml:

 com.microsoft.azure spring-data-cosmosdb 2.3.0 

For at få adgang til Azure Cosmos DB fra vores Spring-applikation har vi brug for URI i vores database, det er adgangsnøgler og databasenavn. Derefter tilføjer vi alle forbindelsesegenskaberne i vores application.properties:

azure.cosmosdb.uri = cosmodb-uri azure.cosmosdb.key = cosmodb-primærnøgle azure.cosmosdb.secondaryKey = cosmodb-sekundær-nøgle azure.cosmosdb.database = cosmodb-navn 

Vi kan finde værdierne for ovenstående egenskaber fra Azure-portalen. URI, primær nøgle og sekundær nøgle vil være tilgængelig i sektionen nøgler i vores Azure Cosmos DB i Azure-portalen.

For at oprette forbindelse til Azure Cosmos DB fra vores applikation er vi nødt til at oprette en klient. For det, vi er nødt til at udvide AbstraktKosmosKonfiguration klasse i vores konfigurationsklasse og tilføj @EnableCosmosRepositories kommentar.

Denne kommentar scanner efter grænseflader, der udvider Spring Datas lagergrænseflader i den specificerede pakke.

Det har vi også brug for konfigurere en bønne af typen CosmosDBConfig:

@Configuration @EnableCosmosRepositories (basePackages = "com.baeldung.spring.data.cosmosdb.repository") offentlig klasse AzureCosmosDbConfiguration udvider AbstractCosmosConfiguration {@Value ("$ {azure.cosmosdb.uri}") privat String uri; @Value ("$ {azure.cosmosdb.key}") privat strengnøgle; @Value ("$ {azure.cosmosdb.database}") privat streng dbName; private CosmosKeyCredential cosmosKeyCredential; @Bean offentlig CosmosDBConfig getConfig () {this.cosmosKeyCredential = ny CosmosKeyCredential (nøgle); CosmosDBConfig cosmosdbConfig = CosmosDBConfig.builder (uri, this.cosmosKeyCredential, dbName) .build (); returner cosmosdbConfig; }}

4.2. Oprettelse af en enhed til Azure Cosmos DB

For at interagere med Azure Cosmos DB bruger vi enheder. Så lad os oprette en enhed, som vi gemmer i Azure Cosmos DB. At gøre vores Produkt klassificere en enhed, vi bruger @Dokument kommentar:

@Document (collection = "products") offentlig klasse Produkt {@Id privat String produktid; privat streng produktnavn; privat dobbelt pris; @PartitionKey private String productCategory; }

I dette eksempel vi har brugt kollektion attribut med værdien Produkter, for at angive dette vil være navnet på vores container i databasen. Hvis vi ikke giver nogen værdi for kollektion parameter, så vil klassens navn blive brugt som containernavnet i databasen.

Vi har også defineret et id til vores dokument. Vi kan enten oprette et felt med navnet id i vores klasse, eller vi kan kommentere et felt med @Id kommentar. Her har vi brugt produktid felt som dokument-id.

Vi kan logisk partitionere vores data i vores container ved hjælp af en partitionsnøgle ved at kommentere et felt med @PartitionKey. I vores klasse har vi brugt Produktkategori felt som partitionsnøgle.

Som standard er indekseringspolitikken defineret af Azure, men vi kan også tilpasse den ved hjælp af @DocumentIndexingPolicy kommentar til vores enhedsklasse.

Vi kan også aktivere optimistisk låsning for vores enhedscontainer ved at oprette et felt med navnet _etag og kommentere det med @Version.

4.3. Definition af lageret

Nu lad os oprette en ProductRepository interface, der udvides CosmosRepository. Ved hjælp af denne grænseflade kan vi udføre CRUD-operationer på vores Azure Cosmos DB:

@Repository offentlig grænseflade ProductRepository udvider CosmosRepository {Liste findByProductName (String productName); }

Som vi kan se, defineres dette på samme måde som andre Spring Data-moduler.

4.4. Test af forbindelsen

Nu kan vi oprette en Junit-test for at gemme en Produkt enhed i Azure Cosmos DB ved hjælp af vores ProductRepository:

@SpringBootTest offentlig klasse AzureCosmosDbApplicationManualTest {@Autowired ProductRepository productRepository; @Test offentligt ugyldigt givenProductIsCreated_whenCallFindById_thenProductIsFound () {Produkt produkt = nyt produkt (); product.setProductid ("1001"); product.setProductCategory ("Shirt"); product.setPrice (110.0); product.setProductName ("Blå skjorte"); productRepository.save (produkt); Product retrievedProduct = productRepository.findById ("1001", new PartitionKey ("Shirt")) .orElse (null); Assert.notNull (hentetProdukt, "Hentet produkt er Null"); }}

Ved at køre denne Junit-test kan vi teste vores forbindelse til Azure Cosmos DB fra vores Spring-applikation.

5. Konklusion

I denne vejledning lærte vi om Azure Cosmos DB. Yderligere lærte vi, hvordan man får adgang til Azure Cosmos DB fra en Spring Boot-applikation, hvordan man opretter enheder og konfigurerer et lager ved at udvide CosmosRepository at interagere med det.

Koden til ovenstående eksempel er tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found