学习参考资料链接
-
[Server Endpoint][https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html] 设置
比如我们的DynamoDb使用的区域是:
这里我们选用的是Amazon DynamoDB用的Endpoint
这里我使用的是dynamodb.us-west-2.amazonaws.com,协议选择的HTTP,Https走不通目前AWS中工程师没有给出具体理由;
见代码:
static AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration
("http://dynamodb.us-west-2.amazonaws.com", "us-west-2"))
.build();
static SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
- [IAM的设置][https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/access_policies.html]
把生成的credentials 放在这个目录(自己创建的)中:
【注】:若IDEA 版本必须是2018.3版以上的,
需要依赖的jar
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.431</version>
</dependency>
需要的plugin
-
如上操作后即可使用IDEA对Amazon Db的操作;
-
相关的CRUD 操作;
Amazon DynamoDB据我向AWS开发人员请教时了解到是没有封装类似于MongoDB的分页操作的,具体的分页操作可见[分页链接][https://www.talentica.com/blogs/dynamo-db-pagination/] 估计你也不会看;
相关的DynamoDb SDK的文档[链接1][https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/DynamoDB.html] [链接2][https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html][链接3][https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapper.html] [链接4][[https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/DynamoDBMapper.CRUDExample1.html] [链接5][https://www.programcreek.com/java-api-examples/?api=com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper]可做参考,
但是如上官方链接估计使用或多或少都是有问题的,具体的操作还得我提交的demo,上面都是可以跑通的;
-
[解决 PKIX:unable to find valid certification path to requested target][http://www.ibloger.net/article/3024.html]
【注】如何在控制台创建表的时候,要注意如果使用排序健则用封装好的DynamoDbMapper只能插入数据,查询数据时跟AWS工程师调了半天也没有查出数据,查询的时候需要带上主键和排序键 才能查出,若是用原生的API查询出来是很苦逼的,代码如下:
Table table = dynamoDB.getTable(tableName);
System.out.println("--- "+tableName+" ---");
Map<String, AttributeValue> key = new HashMap<String, AttributeValue>();
key.put("id", new AttributeValue().withN(120+""));//主键 withN:表示传入的是数字
key.put("Title", new AttributeValue().withS("Book 120 Title"));//排序键 withS:表示传入的字符串
GetItemRequest getItemRequest = new GetItemRequest()
.withTableName(tableName)
.withKey(key);
GetItemResult result = client.getItem(getItemRequest);
System.out.println(result.getItem());
那如果看你这张表是否有排序键呢?如下图:
也可以:
重点是整理的如下Demo:
package com.tcl.amazondemo.DynamoDb;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.model.*;
import com.tcl.amazondemo.DynamoDb.Entity.Book;
import java.text.SimpleDateFormat;
import java.util.Arrays;
public class IotDynamoDb {
static AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration
("http://dynamodb.us-west-2.amazonaws.com", "us-west-2")<