代码示例:使用 Spring Boot、Amazon DynamoDB 和适用于 Java 的 AWS 开发工具包 2.x 创建您的首个 Web 应用程序

1. 介绍

这个示例可以从 web 页面提交数据到 AWS DynamoDB。除了使用 AWS DynamoDB,应用还使用了 AWS Simple Notification Service and AWS Elastic Beanstalk.

应用使用 software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient 类来存储数据到 AWS DynamoDB。(DynamoDB enhanced client

DynamoDB 中的数据更新之后,应用会使用 AWS SNS 发送消息通知用户。

浏览器访问 web 页面,填写数据;
Java Web 应用调用 DynamoDB 服务示例 - 图1

提交数据后,经过 Spring Controller 将数据据持久化到 DynamoDB 中的 Greeting 表;
Java Web 应用调用 DynamoDB 服务示例 - 图2

数据表更新后,会发送一条消息通知用户(由于 SNS 服务发送短信到美国之外的国家是收费服务,所以将此功能注释了);
Java Web 应用调用 DynamoDB 服务示例 - 图3

项目基于 Spring Boot 开发,然后使用 AWS Elastic Beanstalk 部署;

2. 创建项目

在 IntelliJ 中创建一个 Maven 项目。
image.png

3. 添加 POM 依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>spring-aws</groupId>
  7. <artifactId>greetings</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <packaging>jar</packaging>
  10. <description>Demo project for Spring Boot</description>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>2.2.5.RELEASE</version>
  15. <relativePath/> <!-- lookup parent from repository -->
  16. </parent>
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20. <dependencyManagement>
  21. <dependencies>
  22. <dependency>
  23. <groupId>software.amazon.awssdk</groupId>
  24. <artifactId>bom</artifactId>
  25. <version>2.10.54</version>
  26. <type>pom</type>
  27. <scope>import</scope>
  28. </dependency>
  29. </dependencies>
  30. </dependencyManagement>
  31. <dependencies>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-web</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-test</artifactId>
  43. <scope>test</scope>
  44. <exclusions>
  45. <exclusion>
  46. <groupId>org.junit.vintage</groupId>
  47. <artifactId>junit-vintage-engine</artifactId>
  48. </exclusion>
  49. </exclusions>
  50. </dependency>
  51. <!-- AWS API -->
  52. <dependency>
  53. <groupId>software.amazon.awssdk</groupId>
  54. <artifactId>dynamodb-enhanced</artifactId>
  55. <version>2.11.0-PREVIEW</version>
  56. </dependency>
  57. <dependency>
  58. <groupId>software.amazon.awssdk</groupId>
  59. <artifactId>dynamodb</artifactId>
  60. <version>2.5.10</version>
  61. </dependency>
  62. <dependency>
  63. <groupId>software.amazon.awssdk</groupId>
  64. <artifactId>sns</artifactId>
  65. </dependency>
  66. </dependencies>
  67. <build>
  68. <plugins>
  69. <plugin>
  70. <groupId>org.springframework.boot</groupId>
  71. <artifactId>spring-boot-maven-plugin</artifactId>
  72. </plugin>
  73. </plugins>
  74. </build>
  75. </project>

4. 项目代码

  • 后端代码:
    • DynamoDBEnhanced:它使用 DynamoDB 增强的客户端 API 向 DynamoDB 表注入数据。
    • PublishTextSMS :一个发送文本消息的 Java 类。
    • Greeting:数据实体类。
    • GreetingController:控制器。
    • GreetingApplication:SpringBoot 入口类。
  • 前端代码:
    • greeting.html:提交数据的表单;
    • result.html:提交数据到后台,返回的页面; :::info 注意修改 DynamoDBEnhanced、PublishTextSMS 区域代码; ::: image.png

      5. 构建 JAR 包

      通过 mvn package 命令构建 web 应用的 JAR 包,然后通过 Elastic Beanstalk 上传可执行的 JAR 文件,部署应用。

6. 创建 DynamoDB table

除了可以在 DynamoDB 控制台创建表,还可以使用代码调用 API 进行创建(Amazon DynamoDB Java code examples
image.png

7. 部署应用到 Elastic Beanstalk

image.png
image.png
image.png
Java Web 应用调用 DynamoDB 服务示例 - 图10
image.png
image.png
image.png
image.png
image.png