DynamoDB v aplikácii Spring Boot pomocou údajov Spring

1. Prehľad

V tomto článku preskúmame základy integrácie DynamoDB do aplikácie Spring Boot s praktickým ukážkovým projektom.

Ukážeme si, ako nakonfigurovať aplikáciu tak, aby používala miestnu inštanciu DynamoDB pomocou Spring Data. Vytvoríme tiež príklad dátového modelu a triedy úložiska, ako aj vykonanie skutočných operácií s databázou pomocou integračného testu.

2. DynamoDB

DynamoDB je plne spravovaná hostovaná databáza NoSQL na AWS, podobne ako iné databázy NoSQL, ako sú Cassandra alebo MongoDB. DynamoDB ponúka rýchly, konzistentný a predvídateľný výkon a je masívne škálovateľný.

Viac informácií o DynamoDB sa dozviete v dokumentácii AWS.

Poďme nainštalovať lokálna inštancia DynamoDB aby nevznikli náklady na spustenie aktívnej inštancie.

Pre vývoj má lokálne spustenie DynamoDB väčší zmysel ako spustenie na AWS; lokálna inštancia sa spustí ako spustiteľný súbor JAR.

Pokyny na miestne spustenie DynamoDB nájdete tu.

3. Závislosti Maven

Pridajte nasledujúce závislosti, aby ste mohli začať pracovať s DynamoDB pomocou Spring Data:

  • Jarné údaje JPA
  • AWS Java SDK DynamoDB
  • Komunitný modul jarných dát DynamoDB
   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 

Pozrite sa na Spring Data Release Train, AWS Java SDK pre Amazon DynamoDB a Spring Data DynamoDB, kde nájdete najnovšie verzie vyššie.

4. Konfigurácia

Ďalej definujeme nasledujúce vlastnosti v application.properties spis:

amazon.dynamodb.endpoint = // localhost: 8000 / amazon.aws.accesskey = kľúč amazon.aws.secretkey = key2 

Vyššie uvedené prístupové a tajné kľúče sú iba ľubovoľné hodnoty pre vašu miestnu konfiguráciu. Pri prístupe k miestnej inštancii DynamoDB musia byť tieto polia vyplnené niektorými hodnotami, nie sú však potrebné na skutočnú autentifikáciu.

Vlastnosti sa dynamicky vytiahnu z application.properties uložiť v konfigurácia jari:

@Configuration @EnableDynamoDBRepositories (basePackages = "com.baeldung.spring.data.dynamodb.repositories") verejná trieda DynamoDBConfig {@Value ("$ {amazon.dynamodb.endpoint}") súkromný reťazec amazonDynamoDBEndpoint; @Value ("$ {amazon.aws.accesskey}") private String amazonAWSAccessKey; @Value ("$ {amazon.aws.secretkey}") private String amazonAWSSecretKey; @Bean public AmazonDynamoDB amazonDynamoDB () {AmazonDynamoDB amazonDynamoDB = nový AmazonDynamoDBClient (amazonAWSCredentials ()); if (! StringUtils.isEmpty (amazonDynamoDBEndpoint)) {amazonDynamoDB.setEndpoint (amazonDynamoDBEndpoint); } vratit amazonDynamoDB; } @Bean public AWSCredentials amazonAWSCredentials () {return new BasicAWSCredentials (amazonAWSAccessKey, amazonAWSSecretKey); }}

5. Dátový model

Poďme teraz vytvoriť model POJO, ktorý bude reprezentovať údaje uložené v DynamoDB.

Tento POJO použije na definovanie názvu tabuľky, atribútov, kľúčov a ďalších aspektov tabuľky podobné anotácie, aké sa používajú v režime dlhodobého spánku.

5.1. Atribúty dátového modelu

Nasledujúca trieda, Informácie o produkte, predstavuje tabuľku s položkami, ktorá obsahuje 3 atribúty:

  1. ID
  2. MSRP
  3. Náklady

5.2 Trieda dátových modelov Java

Vytvorme súbor s názvom ProductInfo.java v priečinku dátového modelu:

@DynamoDBTable (tableName = "ProductInfo") verejná trieda ProductInfo {private String id; private String msrp; súkromné ​​náklady na reťazec; @DynamoDBHashKey @DynamoDBAutoGeneratedKey public String getId () {return id; } @DynamoDBAttribute public String getMsrp () {return msrp; } @DynamoDBAttribute public String getCost () {náklady na vrátenie; } // štandardní stavitelia / konštruktéri} 

6. Úložisko CRUD

Ďalej musíme vytvoriť a Úložisko produktu rozhranie na definovanie funkčnosti CRUD, ktorú chceme vybudovať. Úložiská používané na čítanie a uchovávanie údajov do az DynamoDB budú implementovať toto rozhranie:

@EnableScan verejné rozhranie ProductInfoRepository rozširuje CrudRepository {voliteľné findById (ID reťazca); } 

7. Test integrácie

Ďalej vytvoríme test integrácie, aby sme sa mohli úspešne pripojiť k miestnej inštancii DynamoDB:

@RunWith (SpringJUnit4ClassRunner.class) @SpringBootTest (classes = Application.class) @WebAppConfiguration @ActiveProfiles ("local") @TestPropertySource (properties = {"amazon.dynamodb.endpoint = // localhost: 8000 /", "amazon.aws .accesskey = test1 "," amazon.aws.secretkey = test231 "}) verejná trieda ProductInfoRepositoryIntegrationTest {private DynamoDBMapper dynamoDBMapper; @Autowired private AmazonDynamoDB amazonDynamoDB; Úložisko @Autowired ProductInfoRepository; súkromný statický konečný reťazec EXPECTED_COST = "20"; súkromný statický konečný reťazec EXPECTED_PRICE = "50"; @ Pred verejným nastavením void () vyvolá výnimku {dynamoDBMapper = nový DynamoDBMapper (amazonDynamoDB); CreateTableRequest tableRequest = dynamoDBMapper .generateCreateTableRequest (ProductInfo.class); tableRequest.setProvisionedThroughput (nový ProvisionedThroughput (1L, 1L)); amazonDynamoDB.createTable (tableRequest); // ... dynamoDBMapper.batchDelete ((List) repository.findAll ()); } @Test public void givenItemWithExectedCost_whenRunFindAll_thenItemIsFound () {ProductInfo productInfo = nový ProductInfo (EXPECTED_COST, EXPECTED_PRICE); repository.save (productInfo); Výsledok zoznamu = (Zoznam) repository.findAll (); assertThat (result.size (), is (greaterThan (0))); assertThat (result.get (0) .getCost (), je (rovnajú sa (EXPECTED_COST))); }} 

8. Záver

A sme hotoví - môžeme teraz pripojiť k DynamoDB z aplikácie Spring Boot.

Po dokončení lokálneho testovania by sme samozrejme mali byť schopní transparentne použiť živú inštanciu DynamoDB na AWS a spustený kód spustiť iba s malými zmenami konfigurácie.

Príklad použitý v tomto článku je ako vždy k dispozícii ako ukážkový projekt na GitHub.