後,我是相當新的AWS SDKS3客戶端連接泄漏例外
我想從S3文件,但文件可能不存在,顯然有簡單的方法來檢查,與亞馬遜S3客戶端,所以我試圖得到該對象反正,並在異常處理我檢查錯誤message.equals(「noSuchKey」)。 (我知道使用異常來控制這樣的流量不是最佳實踐,但無法找到更好的方式)
但是,然後問題變成http池客戶端導致資源泄漏,我找不到方法來關閉它。
下面的代碼:
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子句的對象變爲空裏面,所以我真的不能收我it..nor可以關閉它的任何輸入流。日誌給我:
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初始化一個明確的指示,但我可以」 t找到一種方法來關閉它
關於如何關閉它的任何想法?或者我可以如何避免使用異常處理?