2016-12-18 46 views
2

考慮到這一代碼:DynamoDB - 是否需要調用shutdown()?

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()來關閉連接?

回答

2

該文件似乎很清楚。

關機

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資源。

當然,好的做法表明,如果您可以選擇清理某些東西,那麼這樣做可能是一個好主意,但看起來顯然是可選的。

相關問題