0

我正在使用 com.amazonaws 的 dynamodblocal(来自 maven 的 1.10.5.1)在本地创建一个 inMemory dynamoDB。

启动本地服务器的 Java 代码是:

server = ServerRunner.createServerFromCommandLineArgs({ "port", getAvailablePort(), "-inMemory", "-sharedDb" });
server.start();
AmazonDynamoDBClient amazonDynamoDBClient = new AmazonDynamoDBClient(basicAWSCredentials);

这是确认我已成功启动本地 dynamodb 的日志:

Initializing DynamoDB Local with the following configuration:
Port:   60677
InMemory:   true
DbPath: null
SharedDb:   true
shouldDelayTransientStatuses:   false
CorsParams: *

http://localhost:60677/shell此处使用端口 60677,我可以从 Web 浏览器手动打开。但是当我尝试以编程方式访问它时它不起作用。我不断得到HTTP/1.1 500 Server Error

这会给我 500 错误(端口将是 的输出getAvailablePort()):

amazonDynamoDBClient.setEndpoint("http://localhost:" + port);
amazonDynamoDBClient.listTables();

另外,当我从命令行启动一个时:

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -port 9999 -inMemory -sharedDb

并尝试以编程方式连接到它,它工作正常。它允许我以编程方式执行所有 CRUD 操作。

我究竟做错了什么?

4

1 回答 1

1

当本地 DynamoDB 服务器启动并运行时,您可以使用以下代码获取表列表。

只需在下面的代码中相应地更改端口号。basicAWSCredentials 不是必需的。

DynamoDB dynamoDB = new DynamoDB(new AmazonDynamoDBClient().withEndpoint("http://localhost:8000"));

TableCollection<ListTablesResult> tables = dynamoDB.listTables();
Iterator<Table> iterator = tables.iterator();

while (iterator.hasNext()) {
    Table table = iterator.next();
    System.out.println(table.getTableName());
}
于 2016-10-21T23:16:15.383 回答