我如何知道AmazonS3Client是否已关闭?

时间:2020-01-14 13:41:07

标签: java amazon-s3 aws-sdk

有没有办法告诉我AmazonS3Client是否已关闭?

下面是我要避免每次创建新客户端并确保是否有其他组件(由于错误)关闭它不会破坏下一个请求的情况。

 private AmazonS3ClientBuilder createBuilder() {

        return AmazonS3ClientBuilder.standard()
                .withCredentials(InstanceProfileCredentialsProvider.getInstance();)
                .withRegion(clientRegion);
    }


    public synchronized AmazonS3 buildAmazonClient() {
        if (s3Client == null || s3Client.*IS_SHUTDOWN?*)
            s3Client = buildAmazonClient();
        return s3Client;
    }

1 个答案:

答案 0 :(得分:1)

根据Amazon SDK Developer Guide

SDK中的

服务客户端是线程安全的,为了获得最佳性能,您应该将它们视为长期对象。每个客户端都有自己的连接池资源

Amazon SDK Reference

这是一个可选方法,不要求调用者调用它,但是如果他们想显式释放任何打开的资源,则可以调用

因此,尽管似乎没有任何方法可以检查它是否已经关闭(即,客户端不再可用于发出请求),但是您似乎可以自己进行管理,
但您实际上并不需要:

由于它是一个寿命很长的对象,因此您不应该创建太多实例,并且一旦不想再访问它们时可以选择调用shutdown。

如果您确实有一个用例,需要在应用程序的整个生命周期中实例化并终止不同的实例,建议您对shutdown调用进行监视,以了解是否已已经关闭(尽管,一旦资源被释放,就不再真正需要保留对关闭客户端的引用了……)

相关问题