我对 AWS 开发工具包相当陌生
我正在尝试从 S3 获取文件,但该文件可能不存在,显然有一种简单的方法可以使用 Amazon S3 客户端进行检查,因此无论如何我都在尝试获取该对象,并在异常处理内部检查错误消息。等于(“noSuchKey”)。(我知道使用异常来控制这种流程不是最佳做法,但找不到更好的方法)
但是问题就变成了http pooling客户端导致资源泄漏,我找不到关闭它的方法。
这是代码:
AWSCredentials myCredentials = new BasicAWSCredentials(myAccessKeyID, mySecretKey);
AmazonS3 s3Client = new AmazonS3Client(myCredentials)
S3Object object = null;
GetObjectRequest req = new GetObjectRequest(bucketName, fileName);
try{
object = s3Client.getObject(req);
//the following line is not reached because of the exception
InputStream objectData = object.getObjectContent();
//do something
//close everything
} catch(AmazonServiceException e){
if(e.getErrorCode().equals("NoSuchKey")){
//do something
//here the 'object' is null, I don't have a reference to call close -> resource leak
}
else{
DebugLog.d(e);
}
} catch(IOException e){
DebugLog.d(e);
}
在 catch 子句中,对象变为空,所以我不能真正关闭它。我也不能关闭它的任何输入流。日志给了我:
423835 [java-sdk-http-connection-reaper] DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager - Closing connections idle longer than 60 SECONDS
483835 [java-sdk-http-connection-reaper] DEBUG org.apache.http.impl.conn.PoolingClientConnectionManager - Closing connections idle longer than 60 SECONDS
repeat..........
如果我多次调用这个方法并进入catch子句,服务器变得非常慢,这清楚地表明每次初始化一个新的PoolingClientConnectionManager,但我就是找不到关闭它的方法
关于如何关闭它的任何想法?或者我如何避免首先使用异常处理?