2013-11-27 24 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(); 
    } 
}