无法以编程方式使用dynamodblocal访问http:// localhost:{port}

时间:2016-10-21 18:36:04

标签: java amazon-dynamodb dynamo-local

我正在使用com.amazonaws的dynamodblocal(来自maven的v 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: *

此处使用端口60677,我可以从网络浏览器手动打开http://localhost:60677/shell。但是当我尝试以编程方式访问它时,它不起作用。我一直在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操作。

我做错了什么?

1 个答案:

答案 0 :(得分: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());
}