Introduksjon til Spring Data Azure Cosmos DB

1. Oversikt

I denne opplæringen lærer vi om Azure Cosmos DB og hvordan vi kan samhandle med den ved hjelp av Spring Data.

2. Azure Cosmos DB

Azure Cosmos DB er Microsofts globalt distribuerte databasetjeneste.

Det er en NoSQL-database, som gir omfattende servicenivåavtaler for gjennomstrømning, ventetid, tilgjengelighet og konsistensgarantier. Det sikrer også 99,999% tilgjengelighet for både lesing og skriving.

Azure Cosmos DB gir ikke bare to konsistensvalg, dvs. enten konsistente eller ikke konsistente. I stedet, vi får fem konsistensvalg: sterk, avgrenset stalhet, økt, konsekvent prefiks, og endelig.

Vi kan elastisk skalere både gjennomstrømning og lagring av Azure Cosmos DB.

I tillegg er den tilgjengelig i alle Azure-regioner og tilbyr total total distribusjon, ettersom vi kan replikere dataene våre i alle Azure-regioner bare ved å klikke på en knapp. Dette hjelper oss med å ha dataene nærmere brukerne våre, slik at vi kan tjene deres forespørsler raskere.

Det er skjema-agnostiskda det ikke har noe skjema. Videre trenger vi ikke å gjøre noen indeksadministrasjon for Azure Cosmos Db. Det gjør automatisk indeksering av data for oss.

Vi kan jobbe med Azure CosmosDb ved hjelp av forskjellige standard APIer som SQL, MongoDB, Cassandra, etc.

3. Vårdata Azure Cosmos DB

Microsoft tilbyr også en modul som lar oss jobbe med Cosmos DB ved hjelp av Spring Data. I neste avsnitt ser vi hvordan vi kan bruke Azure Cosmos DB i en Spring Boot-applikasjon.

I vårt eksempel oppretter vi en Spring-webapplikasjon som lagrer en produktenhet i en Azure Cosmos-database og utfører grunnleggende CRUD-operasjoner på den. Først må vi konfigurere en konto og database i Azure-portalen ved å følge instruksjonene i dokumentasjonen.

Hvis vi ikke vil opprette en konto på Azure-portalen, gir Azure også Azure Cosmos Emulator. Selv om dette ikke inneholder alle funksjonene til Azure Cosmos Service, og det er noen forskjeller, kan vi bruke den til lokal utvikling og testing.

Vi kan bruke emulatoren i vårt lokale miljø på to måter: enten ved å laste ned Azure Cosmos Emulator på maskinen vår eller kjøre emulatoren på Docker for Windows.

Vi velger alternativet for å kjøre det på Docker for Windows. La oss trekke Docker-bildet ved å kjøre følgende kommando:

docker pull microsoft / azure-cosmosdb-emulator

Deretter kan vi kjøre Docker-bildet og starte beholderen ved å kjøre følgende kommandoer:

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

Når vi har konfigurert Azure Cosmos DB-kontoen og databasen i Azure-portalen eller i Docker, kan vi fortsette å konfigurere den i vår Spring Boot-applikasjon.

4. Bruke Azure Cosmos DB om våren

4.1. Konfigurere vårdata Azure Cosmos DB med våren

Vi begynner med å legge til vår-data-kosmosdb-avhengighet i vår pom.xml:

 com.microsoft.azure spring-data-cosmosdb 2.3.0 

For å få tilgang til Azure Cosmos DB fra vårapplikasjonen, trenger vi URI for databasen vår, det er tilgangsnøkler og databasenavn. Så legger vi til tilkoblingsegenskapene i vår application.properties:

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

Vi kan finne verdiene til ovennevnte egenskaper fra Azure-portalen. URI, primærnøkkel og sekundærnøkkel vil være tilgjengelig i nøkkeldelen til Azure Cosmos DB i Azure-portalen.

For å koble til Azure Cosmos DB fra applikasjonen vår, må vi opprette en klient. For det, vi må utvide AbstraktKosmosKonfigurasjon klasse i vår konfigurasjonsklasse og legg til @EnableCosmosRepositories kommentar.

Denne merknaden vil skanne etter grensesnitt som utvider Spring Datas lagringsgrensesnitt i den angitte pakken.

Vi må også konfigurere en bønne av typen CosmosDBConfig:

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

4.2. Opprette en enhet for Azure Cosmos DB

For å samhandle med Azure Cosmos DB, bruker vi enheter. Så la oss opprette en enhet som vi vil lagre i Azure Cosmos DB. Å gjøre vårt Produkt klasse en enhet, vi bruker @Dokument kommentar:

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

I dette eksemplet, vi har brukt samling attributt med verdien Produkter, for å indikere at dette vil være navnet på containeren vår i databasen. Hvis vi ikke gir noen verdi for samling parameter, så vil klassenavnet brukes som containernavnet i databasen.

Vi har også definert en id for dokumentet vårt. Vi kan enten opprette et felt med navnet id i klassen vår, eller vi kan kommentere et felt med @Id kommentar. Her har vi brukt Produkt ID felt som dokument-ID.

Vi kan logisk partisjonere dataene våre i containeren vår ved å bruke en partisjonsnøkkel ved å kommentere et felt med @PartitionKey. I klassen vår har vi brukt produktkategori felt som partisjonsnøkkel.

Som standard er indekseringspolitikken definert av Azure, men vi kan også tilpasse den ved hjelp av @DocumentIndexingPolicy kommentar til vår enhetsklasse.

Vi kan også aktivere optimal låsing for enhetsbeholderen vår ved å opprette et felt med navnet _etag og kommentere den med @Versjon.

4.3. Definere depotet

la oss lage en ProductRepository grensesnitt som strekker seg CosmosRepository. Ved hjelp av dette grensesnittet kan vi utføre CRUD-operasjoner på Azure Cosmos DB:

@Repository offentlig grensesnitt ProductRepository utvider CosmosRepository {List findByProductName (String productName); }

Som vi kan se, er dette definert på en lignende måte som andre Spring Data-moduler.

4.4. Testing av tilkoblingen

Nå kan vi lage en Junit-test for å lagre en Produkt enhet i Azure Cosmos DB ved hjelp av vår ProductRepository:

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

Ved å kjøre denne Junit-testen kan vi teste forbindelsen vår til Azure Cosmos DB fra vår-applikasjonen.

5. Konklusjon

I denne opplæringen lærte vi om Azure Cosmos DB. Videre lærte vi hvordan du får tilgang til Azure Cosmos DB fra en Spring Boot-applikasjon, hvordan du oppretter enheter og konfigurerer et lager ved å utvide CosmosRepository å samhandle med det.

Koden for eksemplet ovenfor er tilgjengelig på GitHub.


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