DynamoDB egy tavaszi rendszerindító alkalmazásban a tavaszi adatok felhasználásával

1. Áttekintés

Ebben a cikkben, feltárjuk a DynamoDB egy Spring Boot alkalmazásba történő integrálásának alapjait gyakorlati, gyakorlati példaprojektel.

Bemutatjuk, hogyan konfigurálhat egy alkalmazást egy helyi DynamoDB példány használatára a Spring Data segítségével. Létrehozunk egy példa adatmodellt és adattár osztályt, valamint integrációs teszt segítségével elvégezzük a tényleges adatbázis-műveleteket.

2. DynamoDB

A DynamoDB egy teljesen felügyelt NoSQL adatbázis az AWS-en, hasonlóan más NoSQL adatbázisokhoz, például a Cassandra vagy a MongoDB. A DynamoDB gyors, következetes és kiszámítható teljesítményt kínál, és masszívan skálázható.

A DynamoDB-ről többet megtudhat az AWS dokumentációban.

Telepítsük a DynamoDB helyi példánya hogy elkerülje az élő példány futtatásának költségeit.

A fejlesztés szempontjából a DynamoDB lokális futtatása értelmesebb, mint az AWS-en történő futtatás; a helyi példány futtatható JAR fájlként fog futni.

A DynamoDB helyi futtatásáról itt talál útmutatást.

3. Maven-függőségek

Adja hozzá a következő függőségeket a DynamoDB használatához a Spring Data használatával:

  • Spring Data JPA
  • AWS Java SDK DynamoDB
  • Tavaszi Data DynamoDB közösségi modul
   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 

Nézze meg a Spring Data Release Train, az AWS Java SDK for Amazon DynamoDB és a Spring Data DynamoDB alkalmazásokat a fentiek legfrissebb verzióihoz.

4. Konfiguráció

Ezután határozzuk meg a következő tulajdonságokat a alkalmazás.tulajdonságok fájl:

amazon.dynamodb.endpoint = // localhost: 8000 / amazon.aws.accesskey = kulcs amazon.aws.secretkey = kulcs2 

A fent felsorolt ​​hozzáférési és titkos kulcsok csak tetszőleges értékek a helyi konfiguráció számára. A DynamoDB helyi példányának elérésekor ezeket a mezőket meg kell tölteni néhány értékkel, de a tényleges hitelesítéshez nem szükségesek.

A tulajdonságokat dinamikusan kihúzzuk a alkalmazás.tulajdonságok fájl a tavaszi konfig:

@Configuration @EnableDynamoDBRepositories (basePackages = "com.baeldung.spring.data.dynamodb.repositories") public class DynamoDBConfig {@Value ("$ {amazon.dynamodb.endpoint}") private String amazonDynamoDB @Value ("$ {amazon.aws.accesskey}") privát karakterlánc amazonAWSAccessKey; @Value ("$ {amazon.aws.secretkey}") privát karakterlánc amazonAWSSecretKey; @Bean public AmazonDynamoDB amazonDynamoDB () {AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient (amazonAWSCredentials ()); if (! StringUtils.isEmpty (amazonDynamoDBEndpoint)) {amazonDynamoDB.setEndpoint (amazonDynamoDBEndpoint); } return amazonDynamoDB; } @Bean public AWSCredentials amazonAWSCredentials () {új BasicAWSCredentials-t ad vissza (amazonAWSAccessKey, amazonAWSSecretKey); }}

5. Az adatmodell

Most hozzunk létre egy POJO modellt a DynamoDB-ben tárolt adatok ábrázolásához.

Ez a POJO a Hibernátusban használtakhoz hasonló kommentárokat fog használni a táblázat nevének, attribútumainak, kulcsainak és a táblázat egyéb szempontjainak meghatározásához.

5.1. Adatmodell attribútumok

A következő osztály, Termék információ, egy olyan táblázatot képvisel, amely 3 attribútumot tartalmazó elemekkel rendelkezik:

  1. ID
  2. MSRP
  3. Költség

5.2 Java adatmodell osztály

Hozzunk létre egy nevű fájlt ProductInfo.java az adatmodell mappájában:

@DynamoDBTable (tableName = "ProductInfo") public class ProductInfo {private String id; privát karakterlánc msrp; privát húrköltség; @DynamoDBHashKey @DynamoDBAutoGeneratedKey public String getId () {return id; } @DynamoDBAttribute public String getMsrp () {return msrp; } @DynamoDBAttribute public String getCost () {return cost; } // szabványos beállítók / kivitelezők} 

6. CRUD Adattár

Ezután létre kell hoznunk a ProductRepository interfész a kiépíteni kívánt CRUD funkció meghatározásához. A DynamoDB-be és onnan érkező adatok beolvasására és megőrzésére használt adattárak ezt az interfészt valósítják meg:

A @EnableScan nyilvános felület ProductInfoRepository kiterjeszti a CrudRepository {Opcionális findById (String id); } 

7. Integrációs teszt

Ezután hozzunk létre egy integrációs tesztet annak biztosítására, hogy sikeresen csatlakozzunk a DynamoDB helyi példányához:

@RunWith (SpringJUnit4ClassRunner.class) @SpringBootTest (class = Application.class) @WebAppConfiguration @ActiveProfiles ("local") @TestPropertySource (properties = {"amazon.dynamodb.endpoint = // localhost: 8000 /", "amazon .accesskey = test1 "," amazon.aws.secretkey = test231 "}) public class ProductInfoRepositoryIntegrationTest {private DynamoDBMapper dynamoDBMapper; @Autowired privát AmazonDynamoDB amazonDynamoDB; @Autowired ProductInfoRepository repository; privát statikus végső karakterlánc EXPECTED_COST = "20"; privát statikus végső karakterlánc EXPECTED_PRICE = "50"; @A nyilvános void beállítása előtt () dobja a Kivételt {dynamoDBMapper = new DynamoDBMapper (amazonDynamoDB); CreateTableRequest tableRequest = dynamoDBMapper .generateCreateTableRequest (ProductInfo.class); tableRequest.setProvisionedThroughput (új ProvisionedThroughput (1L, 1L)); amazonDynamoDB.createTable (tableRequest); // ... dynamoDBMapper.batchDelete ((List) repository.findAll ()); } @Test public void givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound () {ProductInfo productInfo = new ProductInfo (EXPECTED_COST, EXPECTED_PRICE); repository.save (productInfo); Lista eredménye = (Lista) adattár.findAll (); assertThat (eredmény.méret (), van (nagyobbThan (0))); assertThat (result.get (0) .getCost (), is (equalTo (EXPECTED_COST))); }} 

8. Következtetés

És készen vagyunk - most már megtehetjük csatlakozzon a DynamoDB-hez egy Spring Boot alkalmazásból.

Természetesen a helyi tesztelés befejezése után képesnek kell lenniünk arra, hogy átláthatóan használjuk a DynamoDB élő példányát az AWS-en, és futtassuk a telepített kódot csak kisebb konfigurációs változtatásokkal.

Mint mindig, az ebben a cikkben használt példa mintaprojektként is elérhető a GitHubon.


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