3

AWS Java SDK を使用して、AWS マネジメント コンソールのバケットにファイルをアップロードしています。ただし、最初にアクセスしようとしたときにそのようなファイルがオンラインにない場合、私のコードは例外 (NoSuchKey) をキャッチします。次に、接続を閉じたいと思います。問題は、例外のためにその接続を閉じるための参照がないことです (元の参照は null になります)。これが私のコードです:

    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の間の接続を閉じるために参照として「オブジェクト」を使用しようとしていましたが、明らかに「オブジェクト」は例外が発生したときにnullです。誰かがそれを行う方法を教えてもらえますか? さらに、接続を閉じることができないため、コンソールには 60 秒ごとに次の警告が表示されます。

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

1 に答える 1

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();
    }
}
于 2014-01-21T07:57:18.673 に答える