我正在使用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操作。
我做错了什么?
答案 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());
}