【问题标题】:Implementation of DynamoDB for Spring BootDynamoDB for Spring Boot 的实现
【发布时间】:2018-10-11 11:02:03
【问题描述】:

我正在尝试为我的 Spring Boot 应用程序实现一个后端 DynamoDB。但 AWS 最近更新了他们的 DynamoDB 开发工具包。因此,互联网上几乎所有可用的教程,例如http://www.baeldung.com/spring-data-dynamodb,都没有直接相关性。

我已经阅读了亚马逊关于 DynamoDB 类的 SDK 文档。具体来说,对象的实例化方式和端点/区域设置已被更改。过去,构建和设置端点应该是这样的:

@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);
}

但是,现在不推荐使用 setEndpoint() 方法,[AWS documentation][1] 指出我们应该通过构建器构造 DynamoDB 对象:

AmazonDynamoDBClient() 已弃用。利用 AmazonDynamoDBClientBuilder.defaultClient()

这个另一个StackOverflow post推荐使用这个策略来实例化数据库连接对象:

DynamoDB dynamoDB = new DynamoDB(AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(new EndpointConfiguration("http://localhost:8000", "us-east-1")).build());

Table table = dynamoDB.getTable("Movies");

但我在 IntelliJ 上收到一个错误,即 DynamoDB 是抽象的,无法实例化。但我找不到任何关于要扩展的正确类的文档。

换句话说,我浏览了教程、SO 和 AWS 文档,但没有找到我认为创建客户端的正确方法。有人可以提供有效的实现吗?我专门尝试使用本地 DynamoDB(端点位于 localhost 端口 8000)设置客户端。

【问题讨论】:

    标签: spring-boot amazon-dynamodb


    【解决方案1】:

    我想我可以尝试回答我自己的问题。使用此处DynamoDB Mapper 的开发人员指南,您可以实现一个 DynamoDB Mapper 对象,该对象接收您的客户端并为您执行数据服务,例如加载、查询、删除、保存(本质上是 CRUD?)。这是我觉得很有帮助的documentation

    我使用以下代码创建了自己的名为 DynamoDBMapperClient 的类:

        private AmazonDynamoDB amazonDynamoDB = AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(
                new EndpointConfiguration(amazonDynamoDBEndpoint, amazonAWSRegion)).build();
    
    private AWSCredentials awsCredentials = new AWSCredentials() {
        @Override
        public String getAWSAccessKeyId() {
            return null;
        }
    
        @Override
        public String getAWSSecretKey() {
            return null;
        }
    };
    private DynamoDBMapper mapper = new DynamoDBMapper(amazonDynamoDB);
    
    public DynamoDBMapper getMapper() {
        return mapper;
    }
    

    基本上从属性文件中获取端点和区域配置,然后实例化一个可以使用 getter 访问的新映射器。

    我知道这可能不是完整的答案,所以我没有回答这个问题,但至少这是一个开始,你们可以告诉我我做错了什么!

    【讨论】:

    • 嗨@Yo chen 我有同样的问题。你是如何将它实现为 Bean 的?
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多