DynamoDB dalam Aplikasi Spring Boot Menggunakan Data Spring

1. Ikhtisar

Dalam artikel ini, kita akan menjelajahi dasar-dasar pengintegrasian DynamoDB ke dalam Aplikasi Spring Boot dengan proyek contoh praktis.

Kami akan mendemonstrasikan cara mengonfigurasi aplikasi untuk menggunakan instance DynamoDB lokal menggunakan Spring Data. Kami juga akan membuat model data contoh dan kelas repositori serta melakukan operasi database aktual menggunakan uji integrasi.

2. DynamoDB

DynamoDB adalah database NoSQL yang dihosting yang dikelola sepenuhnya di AWS, mirip dengan database NoSQL lainnya seperti Cassandra atau MongoDB. DynamoDB menawarkan kinerja yang cepat, konsisten, dan dapat diprediksi serta dapat diskalakan secara masif.

Anda dapat mempelajari lebih lanjut tentang DynamoDB di AWS Documentation.

Mari instal instance lokal DynamoDB untuk menghindari biaya menjalankan instance langsung.

Untuk pengembangan, menjalankan DynamoDB secara lokal lebih masuk akal daripada menjalankan di AWS; instance lokal akan dijalankan sebagai file JAR yang dapat dieksekusi.

Anda dapat menemukan petunjuk tentang cara menjalankan DynamoDB secara lokal di sini.

3. Ketergantungan Maven

Tambahkan dependensi berikut untuk mulai bekerja dengan DynamoDB menggunakan Spring Data:

  • Spring Data JPA
  • AWS Java SDK DynamoDB
  • Modul Komunitas Spring Data 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   

Lihat Spring Data Release Train, AWS Java SDK Untuk Amazon DynamoDB, dan Spring Data DynamoDB untuk versi terbaru di atas.

4. Konfigurasi

Selanjutnya, mari kita tentukan properti berikut di file application.properties :

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

Akses dan kunci rahasia yang tercantum di atas hanyalah nilai arbitrer untuk konfigurasi lokal Anda. Saat mengakses instance lokal DynamoDB, bidang ini perlu diisi oleh beberapa nilai tetapi tidak diperlukan untuk benar-benar mengautentikasi.

Properti akan ditarik secara dinamis dari file application.properties di konfigurasi Spring :

@Configuration @EnableDynamoDBRepositories (basePackages = "com.baeldung.spring.data.dynamodb.repositories") public class 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 = new AmazonDynamoDBClient(amazonAWSCredentials()); if (!StringUtils.isEmpty(amazonDynamoDBEndpoint)) { amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint); } return amazonDynamoDB; } @Bean public AWSCredentials amazonAWSCredentials() { return new BasicAWSCredentials( amazonAWSAccessKey, amazonAWSSecretKey); } }

5. Model Data

Sekarang mari buat model POJO untuk mewakili data yang disimpan di DynamoDB.

POJO ini akan menggunakan penjelasan yang mirip dengan yang digunakan dalam Hibernate untuk menentukan nama tabel, atribut, kunci, dan aspek lain dari tabel.

5.1. Atribut Model Data

Kelas berikut, ProductInfo , mewakili tabel dengan item yang berisi 3 atribut:

  1. Indo
  2. MSRP
  3. Biaya

5.2 Kelas Model Data Java

Mari buat file bernama ProductInfo.java di folder model data Anda:

@DynamoDBTable(tableName = "ProductInfo") public class ProductInfo { private String id; private String msrp; private String cost; @DynamoDBHashKey @DynamoDBAutoGeneratedKey public String getId() { return id; } @DynamoDBAttribute public String getMsrp() { return msrp; } @DynamoDBAttribute public String getCost() { return cost; } // standard setters/constructors } 

6. Tempat Penyimpanan CRUD

Selanjutnya, kita perlu membuat antarmuka ProductRepository untuk menentukan fungsionalitas CRUD yang ingin kita bangun. Repositori yang digunakan untuk membaca dan menyimpan data ke dan dari DynamoDB akan mengimplementasikan antarmuka ini:

@EnableScan public interface ProductInfoRepository extends CrudRepository { Optional findById(String id); } 

7. Uji Integrasi

Selanjutnya, mari buat tes integrasi untuk memastikan kita berhasil terhubung ke instance lokal 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" }) public class ProductInfoRepositoryIntegrationTest { private DynamoDBMapper dynamoDBMapper; @Autowired private AmazonDynamoDB amazonDynamoDB; @Autowired ProductInfoRepository repository; private static final String EXPECTED_COST = "20"; private static final String EXPECTED_PRICE = "50"; @Before public void setup() throws Exception { dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB); CreateTableRequest tableRequest = dynamoDBMapper .generateCreateTableRequest(ProductInfo.class); tableRequest.setProvisionedThroughput( new 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); List result = (List) repository.findAll(); assertThat(result.size(), is(greaterThan(0))); assertThat(result.get(0).getCost(), is(equalTo(EXPECTED_COST))); } } 

8. Kesimpulan

Dan kita sudah selesai - kita sekarang dapat terhubung ke DynamoDB dari Aplikasi Spring Boot .

Tentu saja, setelah menyelesaikan pengujian secara lokal, kita harus dapat secara transparan menggunakan instans langsung DynamoDB di AWS dan menjalankan kode yang diterapkan hanya dengan perubahan konfigurasi kecil.

Seperti biasa, contoh yang digunakan dalam artikel ini tersedia sebagai contoh proyek di GitHub.