DynamoDB u aplikaciji za proljetno pokretanje pomoću proljetnih podataka

1. Pregled

U ovom članku, istražit ćemo osnove integracije DynamoDB-a u Spring Boot Application praktičnim, praktičnim primjerom projekta.

Pokazat ćemo kako konfigurirati aplikaciju da koristi lokalnu instancu DynamoDB pomoću Spring Data. Također ćemo stvoriti primjer modela podataka i klase spremišta, kao i izvesti stvarne operacije baze podataka pomoću integracijskog testa.

2. DynamoDB

DynamoDB je potpuno upravljana NoSQL baza podataka na AWS-u, slična drugim NoSQL bazama podataka kao što su Cassandra ili MongoDB. DynamoDB nudi brze, dosljedne i predvidljive performanse i masivno je skalabilan.

Više o DynamoDB možete saznati na AWS dokumentaciji.

Instalirajmo lokalni primjerak DynamoDB-a kako ne bi nastali troškovi pokretanja instance uživo.

Za razvoj, lokalno pokretanje DynamoDB-a ima više smisla od pokretanja na AWS-u; lokalna instanca pokrenut će se kao izvršna JAR datoteka.

Upute o lokalnom pokretanju DynamoDB-a možete pronaći ovdje.

3. Ovisnosti Mavena

Dodajte sljedeće ovisnosti da biste započeli rad s DynamoDB-om pomoću Spring Data:

  • Proljetni podaci JPA
  • AWS Java SDK DynamoDB
  • Proljetni podatkovni modul DynamoDB zajednice
   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 

Pogledajte najnovije verzije gore navedenih izdanja Spring Data Release Train, AWS Java SDK za Amazon DynamoDB i Spring Data DynamoDB.

4. Konfiguracija

Dalje, definirajmo sljedeća svojstva u primjena.svojstva datoteka:

amazon.dynamodb.endpoint = // localhost: 8000 / amazon.aws.accesskey = ključ amazon.aws.secretkey = key2 

Gore navedeni pristupni i tajni ključevi samo su proizvoljne vrijednosti za vašu lokalnu konfiguraciju. Pri pristupu lokalnoj instanci DynamoDB ta polja moraju biti popunjena nekim vrijednostima, ali nisu potrebna za stvarnu provjeru autentičnosti.

Svojstva će se dinamički izvlačiti iz primjena.svojstva uloži u proljetna konfiguracija:

@Configuration @EnableDynamoDBRepositories (basePackages = "com.baeldung.spring.data.dynamodb.repositories") javna klasa DynamoDBConfig {@Value ("$ {amazon.dynamodb.endpoint}") private String amazonDynamoDBEndpoint; @Value ("$ {amazon.aws.accesskey}") private String amazonAWSAccessKey; @Value ("$ {amazon.aws.secretkey}") private String amazonAWSSecretKey; @Bean public AmazonDynamoDB amazonDynamoDB () {AmazonDynamoDB amazonDynamoDB = novi AmazonDynamoDBClient (amazonAWSCredentials ()); if (! StringUtils.isEmpty (amazonDynamoDBEndpoint)) {amazonDynamoDB.setEndpoint (amazonDynamoDBEndpoint); } return amazonDynamoDB; } @Bean public AWSCredentials amazonAWSCredentials () {return new BasicAWSCredentials (amazonAWSAccessKey, amazonAWSSecretKey); }}

5. Model podataka

Stvorimo sada POJO model koji će predstavljati podatke pohranjene u DynamoDB.

Ovaj POJO upotrijebit će bilješke slične onima koje se koriste u stanju hibernacije za definiranje naziva tablice, atributa, ključeva i ostalih aspekata tablice.

5.1. Atributi modela podataka

Sljedeći razred, ProductInfo, predstavlja tablicu s stavkama koja sadrži 3 atributa:

  1. iskaznica
  2. MSRP
  3. Trošak

5.2 Klasa Java modela podataka

Stvorimo datoteku zvanu ProductInfo.java u mapi vašeg podatkovnog modela:

@DynamoDBTable (tableName = "ProductInfo") javna klasa ProductInfo {id privatnog niza; privatni niz msrp; privatni trošak niza; @DynamoDBHashKey @DynamoDBAutoGeneratedKey javni String getId () {return id; } @DynamoDBAttribute javni niz getMsrp () {return msrp; } @DynamoDBAttribute javni niz getCost () {povratni trošak; } // standardni postavljači / konstruktori} 

6. CRUD Repozitorij

Dalje, moramo stvoriti Spremište proizvoda sučelje za definiranje CRUD funkcionalnosti koju želimo izgraditi. Spremišta koja se koriste za čitanje i zadržavanje podataka na i iz DynamoDB-a implementirat će ovo sučelje:

@EnableScan javno sučelje ProductInfoRepository proširuje CrudRepository {Izborno findById (ID niza); } 

7. Integracijski test

Dalje, izradimo test integracije kako bismo osigurali da se možemo uspješno povezati s lokalnom instancom DynamoDB:

@RunWith (SpringJUnit4ClassRunner.class) @SpringBootTest (classes = Application.class) @WebAppConfiguration @ActiveProfiles ("local") @TestPropertySource (properties = {"amazon.dynamodb.endpoint = // localhost: 8000 /", "amazon.a" .accesskey = test1 "," amazon.aws.secretkey = test231 "}) javna klasa ProductInfoRepositoryIntegrationTest {private DynamoDBMapper dynamoDBMapper; @Autowired private AmazonDynamoDB amazonDynamoDB; @Autowired ProductInfoRepository spremište; privatni statički završni niz EXPECTED_COST = "20"; privatni statički završni niz EXPECTED_PRICE = "50"; @ Prije postavljanja javne praznine () baca iznimku {dynamoDBMapper = novi DynamoDBMapper (amazonDynamoDB); CreateTableRequest tableRequest = dynamoDBMapper .generateCreateTableRequest (ProductInfo.class); tableRequest.setProvisionedThroughput (novo ProvisionedThroughput (1L, 1L)); amazonDynamoDB.createTable (tableRequest); // ... dynamoDBMapper.batchDelete ((List) repository.findAll ()); } @Test javna praznina givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound () {ProductInfo productInfo = nova ProductInfo (EXPECTED_COST, EXPECTED_PRICE); repository.save (productInfo); Rezultat popisa = (Popis) repozitorij.findAll (); assertThat (result.size (), je (većeTan (0))); assertThat (result.get (0) .getCost (), je (jednakTo (EXPECTED_COST))); }} 

8. Zaključak

I gotovi smo - možemo sada spojite se na DynamoDB iz aplikacije Spring Boot.

Naravno, nakon završetka lokalnog testiranja, trebali bismo biti u mogućnosti transparentno koristiti aktivnu instancu DynamoDB na AWS-u i pokrenuti implementirani kôd sa samo manjim promjenama konfiguracije.

Kao i uvijek, primjer korišten u ovom članku dostupan je kao ogledni projekt na GitHubu.


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