DynamoDB i en Spring Boot-applikation ved hjælp af Spring Data

1. Oversigt

I denne artikel vi vil undersøge det grundlæggende ved at integrere DynamoDB i en Spring Boot-applikation med et praktisk, praktisk eksempelprojekt.

Vi demonstrerer, hvordan du konfigurerer et program til at bruge en lokal DynamoDB-forekomst ved hjælp af Spring Data. Vi opretter også et eksempel på en datamodel og et lagerklasse samt udfører faktiske databasefunktioner ved hjælp af en integrationstest.

2. DynamoDB

DynamoDB er en fuldt administreret hostet NoSQL-database på AWS, der ligner andre NoSQL-databaser som Cassandra eller MongoDB. DynamoDB tilbyder hurtig, ensartet og forudsigelig ydeevne og er masserbar skalerbar.

Du kan lære mere om DynamoDB i AWS-dokumentationen.

Lad os installere en lokal forekomst af DynamoDB for at undgå at afholde omkostningerne ved at køre en live instans.

Til udvikling giver DynamoDB lokalt mere mening end at køre på AWS; den lokale instans køres som en eksekverbar JAR-fil.

Du kan finde instruktioner om, hvordan du kører DynamoDB lokalt her.

3. Maven-afhængigheder

Tilføj følgende afhængigheder for at begynde at arbejde med DynamoDB ved hjælp af Spring Data:

  • Spring Data 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 

Tjek Spring Data Release Train, AWS Java SDK til Amazon DynamoDB og Spring Data DynamoDB for de nyeste versioner af ovenstående.

4. Konfiguration

Lad os derefter definere følgende egenskaber i application.properties fil:

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

Ovenstående adgangs- og hemmelige nøgler er bare vilkårlige værdier for din lokale konfiguration. Når du får adgang til en lokal forekomst af DynamoDB, skal disse felter udfyldes med nogle værdier, men de er ikke nødvendige for faktisk at godkende.

Egenskaberne trækkes dynamisk ud af application.properties fil i Spring config:

@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 () {returner nye BasicAWSCredentials (amazonAWSAccessKey, amazonAWSSecretKey); }}

5. Datamodellen

Lad os nu oprette en POJO-model til at repræsentere de data, der er gemt i DynamoDB.

Denne POJO bruger annoteringer svarende til dem, der bruges i dvale til at definere tabelnavnet, attributter, nøgler og andre aspekter af tabellen.

5.1. Data Model Attributter

Den følgende klasse, ProductInfo, repræsenterer en tabel med elementer, der indeholder 3 attributter:

  1. ID
  2. MSRP
  3. Koste

5.2 Java Data Model Class

Lad os oprette en fil, der hedder ProductInfo.java i din datamodelmappe:

@DynamoDBTable (tableName = "ProductInfo") offentlig klasse ProductInfo {privat streng-id; privat streng msrp; private strengomkostninger; @DynamoDBHashKey @DynamoDBAutoGeneratedKey offentlig String getId () {return id; } @ DynamoDBAttribute public String getMsrp () {return msrp; } @ DynamoDBAttribute public String getCost () {returomkostninger; } // standard sættere / konstruktører} 

6. CRUD-arkiv

Dernæst skal vi oprette en ProductRepository interface til at definere den CRUD-funktionalitet, vi vil bygge ud. Opbevaringssteder, der bruges til at læse og vedvare data til og fra DynamoDB, implementerer denne grænseflade:

@EnableScan offentlig grænseflade ProductInfoRepository udvider CrudRepository {Valgfri findById (streng-id); } 

7. Integrationstest

Lad os derefter oprette en integrationstest for at sikre, at vi med succes kan oprette forbindelse til den lokale forekomst af DynamoDB:

@RunWith (SpringJUnit4ClassRunner.class) @SpringBootTest (klasser = Application.class) @WebAppConfiguration @ActiveProfiles ("local") @TestPropertySource (egenskaber = {"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 endelig streng EXPECTED_COST = "20"; privat statisk endelig streng EXPECTED_PRICE = "50"; @Før offentlig ugyldig opsætning () kaster undtagelse {dynamoDBMapper = ny DynamoDBMapper (amazonDynamoDB); CreateTableRequest tableRequest = dynamoDBMapper .generateCreateTableRequest (ProductInfo.class); tableRequest.setProvisionedThroughput (ny ProvisionedThroughput (1L, 1L)); amazonDynamoDB.createTable (tableRequest); // ... dynamoDBMapper.batchDelete ((List) repository.findAll ()); } @Test offentligt ugyldigt givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound () {ProductInfo productInfo = new ProductInfo (EXPECTED_COST, EXPECTED_PRICE); repository.save (productInfo); Listeresultat = (Liste) repository.findAll (); assertThat (result.size (), er (størreThan (0))); assertThat (result.get (0) .getCost (), er (equalTo (EXPECTED_COST))); }} 

8. Konklusion

Og vi er færdige - det kan vi nu oprette forbindelse til DynamoDB fra en Spring Boot-applikation.

Efter afslutning af test lokalt skal vi naturligvis være i stand til at bruge en levende forekomst af DynamoDB på AWS og køre den implementerede kode med kun mindre konfigurationsændringer.

Som altid er eksemplet, der bruges i denne artikel, tilgængeligt som et eksempel på et projekt på GitHub.


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