繁体   English   中英

使用 Apache Camel 和 Java DynamoDB 注释将项目写入 DynamoDB

[英]Write item to DynamoDB using Apache Camel with Java Annotations for DynamoDB

情况

我正在尝试使用Apache Camel aws2-ddb 组件写入 DynamoDB。 我的路线使用 JPA 从关系数据库中读取,对目标 class 执行转换并将该 class 放入 DynamoDB 表中。

目标 class 看起来像这样(当然在现实中更复杂)

@DynamoDBTable(tableName = "MyDataTable")
public class MyData {
    private String key;
    private String foo;
    private List<String> bar;

    @DynamoDBHashKey(attributeName = "key")
    public String getKey() { return key; }

    @DynamoDBAttribute(attributeName = "foo")
    public String getFoo() { return foo; }

    @DynamoDBAttribute(attributeName = "bar")
    public List<String> getBar() {  return bar; }

    // ...
}

仅使用 AWS SDK 我会简单地做这样的事情:

DynamoDBMapper mapper = new DynamoDBMapper(client);
mapper.save(myDataItem);

然而,aws2-ddb 组件需要该项目作为Map<String, AttributeValue>

如何将带注释的 class 转换为Map<String, AttributeValue> 感觉这应该是显而易见的事情,但我似乎无法在 AWS SDK 中找到任何内容。

(作为解决方法,我可以在自定义处理器中实现上述DynamoDBMapper代码,但我更愿意使用该组件。)

Unof.netelly 在camel-aws-ddb库向下钻取期间,我发现无法使用 DynamoDbMapper。 基本上, aws-dbb / aws2-dbb组件在幕后使用 DdbProducer,在您的情况下,它实际上是一个调用ddbClient putItem 的处理器。

可能的选项是:

  • 使用DynamoDBMapper而不是纯ddbClient编写您自己的组件。
  • 上面提到的自定义处理器,通过在 header 中设置一个项目(如果您不必处理消息本身,甚至是 bean)。
  • 只需使用当前的 API,它允许使用List<Map<String, AttributeValue>>类型的项目,最后将它们放入消息 header 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM