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:
- ID
- MSRP
- 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.