DynamoDB - 是否需要调用 shutdown()?

roe*_*gol 6 resources amazon-web-services amazon-dynamodb

考虑到这段代码:

QuerySpec spec = new QuerySpec()                
    .withKeyConditionExpression("#1 = :v1")
    .withNameMap(new NameMap().with("#1", "tableKey"))            
    .withValueMap(new ValueMap().withString(":v1", "none.json")); 


//connect DynamoDB instance over AWS
DynamoDB dynamoDB = new DynamoDB(Regions.US_WEST_2);

//get the table instance

String tableName = "WFMHistoricalProcessedFiles";

Table table = dynamoDB.getTable(tableName);   


ItemCollection<QueryOutcome> items = table.query(spec);  

//getting over the results
Iterator<Item> it = items.iterator(); 
Item item = null;
while (it.hasNext()) {
    item = it.next();
    System.out.println(item.toJSONPretty());
}
Run Code Online (Sandbox Code Playgroud)

在使用 DynamoDB 进行任何查询或扫描时,如上例所示。

是否确实需要调用shutdown()才能关闭连接?

Mic*_*bot 9

文档似乎很清楚。

关掉

void shutdown()

关闭此客户端对象,释放任何可能保持打开状态的资源。这是一个可选方法,调用者不会调用它,但是如果他们想显式释放任何打开的资源,可以调用它。客户端关闭后,不应再使用它来发出任何请求。

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/AmazonDynamoDB.html#shutdown--

但要澄清您具体询问的内容:

为了关闭连接?

DynamoDB 并不完全是“连接”。当请求被发送时,它通过 HTTPS 无状态地访问......所以你的代码所说的// connect DynamoDB instance over AWS,这真的不准确。您正在构建一个对象,该对象直到您调用table.query().

该连接稍后可能会在短时间内保持活动状态以供重用,但即使是这样,它也不会从任何有意义的意义上“连接到”DynamoDB。充其量,它连接到 AWS 内部的前端系统,该系统正在监视下一个请求,并且如果该请求在语法上有效且经过授权,则可能会将其转发到 DynamoDB。

但是,此空闲连接(如果存在)不会以会降低您的应用程序或访问同一 DynamoDB 表的其他人的性能的方式消耗任何 DynamoDB 资源。

当然,好的做法表明,如果您可以选择清理某些东西,那么这样做可能是一个好主意,但这显然是可选的。