DynamoDB i en Spring Boot-applikasjon som bruker vårdata

1. Oversikt

I denne artikkelen, vi vil utforske det grunnleggende om å integrere DynamoDB i en Spring Boot-applikasjon med et praktisk, praktisk eksempelprosjekt.

Vi vil demonstrere hvordan du konfigurerer et program for å bruke en lokal DynamoDB-forekomst ved hjelp av Spring Data. Vi oppretter også et eksempel på datamodell og depotklasse, samt utfører faktiske databasoperasjoner ved hjelp av en integrasjonstest.

2. DynamoDB

DynamoDB er en fulladministrert NoSQL-database på AWS, i likhet med andre NoSQL-databaser som Cassandra eller MongoDB. DynamoDB tilbyr rask, konsistent og forutsigbar ytelse og er skalerbar.

Du kan lære mer om DynamoDB i AWS-dokumentasjonen.

La oss installere en lokal forekomst av DynamoDB for å unngå å pådra seg kostnadene ved å kjøre en live forekomst.

For utvikling er det mer fornuftig å kjøre DynamoDB lokalt enn å kjøre på AWS; den lokale forekomsten kjøres som en kjørbar JAR-fil.

Du finner instruksjoner om hvordan du kjører DynamoDB lokalt her.

3. Maven-avhengigheter

Legg til følgende avhengigheter for å begynne å jobbe med DynamoDB ved hjelp av vårdata:

  • Vårdata JPA
  • AWS Java SDK DynamoDB
  • Spring Data DynamoDB Community Module
   org.springframework.data spring-data-releasetrain Lovelace-SR16 pom import com.amazonaws aws-java-sdk-dynamodb 1.11.64 com.github.derjust spring-data-dynamodb 5.1.0 

Ta en titt på Spring Data Release Train, AWS Java SDK for Amazon DynamoDB og Spring Data DynamoDB for de nyeste versjonene av ovennevnte.

4. Konfigurasjon

Deretter la oss definere følgende egenskaper i application.properties fil:

amazon.dynamodb.endpoint = // localhost: 8000 / amazon.aws.accesskey = nøkkel amazon.aws.secretkey = key2 

Tilgangs- og hemmelige nøkler oppført ovenfor er bare vilkårlige verdier for din lokale konfigurasjon. Når du får tilgang til en lokal forekomst av DynamoDB, må disse feltene fylles ut med noen verdier, men er ikke nødvendig for å faktisk autentisere.

Egenskapene vil bli trukket dynamisk ut av application.properties fil i vårkonfigurasjonen:

@Configuration @EnableDynamoDBRepositories (basePackages = "com.baeldung.spring.data.dynamodb.repositories") offentlig klasse DynamoDBConfig {@Value ("$ {amazon.dynamodb.endpoint}") privat streng AmazonDynamoDBEndpoint; @Value ("$ {amazon.aws.accesskey}") privat streng amazonAWSAccessKey; @Value ("$ {amazon.aws.secretkey}") privat streng amazonAWSSecretKey; @Bean offentlig AmazonDynamoDB amazonDynamoDB () {AmazonDynamoDB amazonDynamoDB = ny AmazonDynamoDBClient (amazonAWSCredentials ()); hvis (! StringUtils.isEmpty (amazonDynamoDBEndpoint)) {amazonDynamoDB.setEndpoint (amazonDynamoDBEndpoint); } returner amazonDynamoDB; } @Bean public AWSCredentials amazonAWSCredentials () {return new BasicAWSCredentials (amazonAWSAccessKey, amazonAWSSecretKey); }}

5. Datamodellen

La oss nå lage en POJO-modell for å representere dataene som er lagret i DynamoDB.

Denne POJO vil bruke merknader som ligner på de som brukes i dvalemodus for å definere tabellnavnet, attributter, nøkler og andre aspekter av tabellen.

5.1. Datamodellattributter

Følgende klasse, ProductInfo, representerer en tabell med elementer som inneholder tre attributter:

  1. ID
  2. MSRP
  3. Koste

5.2 Java datamodellklasse

La oss lage en fil som heter ProductInfo.java i datamodellmappen din:

@DynamoDBTable (tableName = "ProductInfo") offentlig klasse ProductInfo {privat streng-id; privat streng msrp; privat streng kostnad; @DynamoDBHashKey @DynamoDBAutoGeneratedKey offentlig String getId () {retur id; } @ DynamoDBAttribute public String getMsrp () {return msrp; } @ DynamoDBAttribute offentlig String getCost () {returkostnad; } // standard settere / konstruktører} 

6. CRUD Repository

Deretter må vi lage en ProductRepository grensesnitt for å definere CRUD-funksjonaliteten vi ønsker å bygge ut. Repositories som brukes til å lese og vedvare data til og fra DynamoDB vil implementere dette grensesnittet:

@EnableScan offentlig grensesnitt ProductInfoRepository utvider CrudRepository {Valgfritt findById (streng-id); } 

7. Integrasjonstest

Deretter la oss lage en integrasjonstest for å sikre at vi kan koble til den lokale forekomsten av DynamoDB:

@RunWith (SpringJUnit4ClassRunner.class) @SpringBootTest (klasser = Application.class) @WebAppConfiguration @ActiveProfiles ("local") @TestPropertySource (egenskaper = {"amazon.dynamodb.endpoint = // localhost: 8000 /", "amazon.aws .accesskey = test1 "," amazon.aws.secretkey = test231 "}) offentlig klasse ProductInfoRepositoryIntegrationTest {private DynamoDBMapper dynamoDBMapper; @Autowired privat AmazonDynamoDB amazonDynamoDB; @Autowired ProductInfoRepository repository; privat statisk sluttstreng EXPECTED_COST = "20"; privat statisk sluttstreng EXPECTED_PRICE = "50"; @Før offentlig ugyldig oppsett () kaster Unntak {dynamoDBMapper = ny DynamoDBMapper (amazonDynamoDB); CreateTableRequest tableRequest = dynamoDBMapper .generateCreateTableRequest (ProductInfo.class); tableRequest.setProvisionedThroughput (new ProvisionedThroughput (1L, 1L)); amazonDynamoDB.createTable (tableRequest); // ... dynamoDBMapper.batchDelete ((List) repository.findAll ()); } @Test offentlig ugyldig givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound () {ProductInfo productInfo = new ProductInfo (EXPECTED_COST, EXPECTED_PRICE); repository.save (productInfo); Listresultat = (List) repository.findAll (); assertThat (result.size (), er (greaterThan (0))); assertThat (result.get (0) .getCost (), er (equalTo (EXPECTED_COST))); }} 

8. Konklusjon

Og vi er ferdige - vi kan nå koble til DynamoDB fra en Spring Boot Application.

Etter å ha fullført testing lokalt, skal vi selvfølgelig kunne bruke en live forekomst av DynamoDB på AWS og kjøre den distribuerte koden med bare mindre konfigurasjonsendringer.

Som alltid er eksemplet som brukes i denne artikkelen tilgjengelig som et eksempelprosjekt på GitHub.


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