考虑此代码:
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());
}
使用DynamoDB进行上述示例中的任何查询或扫描。
是否真的需要调用shutdown()
才能关闭连接?
答案 0 :(得分:3)
文档似乎很清楚。
<强>关闭强>
void shutdown()
关闭此客户端对象,释放可能保持打开的所有资源。这是一个可选方法,并且不希望调用者调用它,但是如果他们想要显式释放任何开放资源。客户端关闭后,不应再用它来发出任何请求。
但要澄清你具体询问的内容:
为了关闭连接?
与DynamoDB没有完全“连接”。它是通过HTTPS,无状态访问的,当发送请求时...所以你的代码显示// connect DynamoDB instance over AWS
,这真的不准确。您正在构建一个在您调用table.query()
之前无法实际连接的对象。
以后这个连接可能会在短时间内保持活动状态以便重用,但即使是真的,它也不会在任何有意义的意义上“连接到”DynamoDB。最好的情况是,它连接到AWS内部的前端系统,该系统正在监视下一个请求,如果它在语法上有效且经过授权,可能会将该请求转发给DynamoDB。
但是这个空闲连接(如果存在)不会以某种方式消耗任何DynamoDB资源,从而降低应用程序或访问同一DynamoDB表的其他人的性能。
当然,良好的做法表明,如果您可以选择清理某些东西,那么这样做可能是一个好主意,但它似乎显然是可选的。