2013-11-27 48 views
2

我正在使用AWS java SDK在AWS管理控制檯的存儲桶上上載文件。但是,如果我第一次嘗試訪問它時沒有在線文件​​,我的代碼將捕獲異常(NoSuchKey)。然後我想關閉連接。問題是我沒有任何引用關閉該連接,因爲例外(原始引用將爲空)。這裏是我的代碼:如果在查詢中沒有這樣的密鑰,則關閉AWS連接

S3Object object = null; 
    GetObjectRequest req = new GetObjectRequest(bucketName, fileName); 

    try{ 
     logconfig(); 

     object = s3Client.getObject(req); 
        ... 
    catch(AmazonServiceException e){ 
     if(e.getErrorCode().equals("NoSuchKey")) 

我試圖用「對象」作爲參考來結束我的Eclipse和AWS之間的聯繫,但顯然「對象」爲空當異常發生。 任何人都可以告訴我該怎麼做嗎? 此外,因爲我不能關閉連接,我的控制檯都會有這樣每60秒警告:

8351167 [java-sdk-http-connection-reaper] DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager - Closing connections idle longer than 60 SECONDS 
+1

我不認爲你需要做的任何連接處理自己。這由圖書館照顧。您只需調用's3client'中的API。 – RandomQuestion

+0

如果實現Closable(),則應該調用close()給對象。否則可能會發生資源泄漏。 – AMing

回答

1

如果您使用Java 1.7,你可以使用try-with-resouce塊。該對象將在離開塊時自動關閉。

GetObjectRequest req = new GetObjectRequest(bucketName, fileName); 
try(S3Object object = s3Client.getObject(req)) { 
    ... 
} catch(AmazonServiceException e) { 
    if(e.getErrorCode().equals("NoSuchKey")); 
} 

如果您使用Java 1.6或以前的版本,你需要做的是在finally塊

S3Object object = null; 
GetObjectRequest req = new GetObjectRequest(bucketName, fileName); 
try { 
    object = s3Client.getObject(req)) 
    ... 
} catch(AmazonServiceException e) { 
    if(e.getErrorCode().equals("NoSuchKey")); 
} finally { 
    if (object != null) { 
     object.close(); 
    } 
}