创建服务客户端 - 适用于 Java 的 AWS SDK 1.x

适用于 Java 的 AWS SDK 1.x 版本自 2024 年 7 月 31 日起已进入维护模式,并将于 2025 年 12 月 31 日终止支持。我们建议您迁移到 AWS SDK for Java 2.x 以继续获得新功能、可用性改进和安全更新。

创建服务客户端

要提交请求至 Amazon Web Services,您首先要创建一个服务客户端对象。推荐的方法是使用服务客户端生成器。

每个 AWS 服务都有一个服务接口,提供与服务 API 中各项操作对应的方法。例如,DynamoDB 的服务接口名为 AmazonDynamoDBClient。每个服务接口都有对应的客户端生成器,可用于构建服务接口的实施。DynamoDB 的客户端生成器类名为 AmazonDynamoDBClientBuilder

获取客户端生成器

要获取客户端生成器的实例,使用下例中所示的静态工厂方法 standard

AmazonDynamoDBClientBuilder builder = AmazonDynamoDBClientBuilder.standard();

获得生成器以后,可以使用生成器 API 中的多个常用 setter 来自定义客户端的属性。例如,您可以按以下方法设置自定义区域和自定义凭证提供程序。

AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard() .withRegion(Regions.US_WEST_2) .withCredentials(new ProfileCredentialsProvider("myProfile")) .build();
注意

常用的 withXXX 方法会返回 builder 对象,由此可以将方法调用组合起来,这样不仅方便而且代码更加便于阅读。在配置需要的属性后,可以调用 build 方法创建客户端。创建的客户端不可更改,而且对 setRegionsetEndpoint 的所有调用都会失败。

生成器可以使用相同配置创建多个客户端。在编写应用程序时,请注意生成器可变而且是非线程安全的。

以下代码使用生成器作为客户端实例的工厂。

public class DynamoDBClientFactory { private final AmazonDynamoDBClientBuilder builder = AmazonDynamoDBClientBuilder.standard() .withRegion(Regions.US_WEST_2) .withCredentials(new ProfileCredentialsProvider("myProfile")); public AmazonDynamoDB createClient() { return builder.build(); } }

生成器还显示 ClientConfigurationRequestMetricCollector 以及自定义 RequestHandler2 列表的 fluent setter。

以下给出将覆盖所有可配置属性的完整示例。

AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard() .withRegion(Regions.US_WEST_2) .withCredentials(new ProfileCredentialsProvider("myProfile")) .withClientConfiguration(new ClientConfiguration().withRequestTimeout(5000)) .withMetricsCollector(new MyCustomMetricsCollector()) .withRequestHandlers(new MyCustomRequestHandler(), new MyOtherCustomRequestHandler) .build();

创建异步客户端

适用于 Java 的 AWS SDK的每个服务均有异步客户端(Amazon S3 除外),且每个服务都有相应的异步客户端生成器。

使用默认 ExecutorService 创建异步 DynamoDB 客户端

AmazonDynamoDBAsync ddbAsync = AmazonDynamoDBAsyncClientBuilder.standard() .withRegion(Regions.US_WEST_2) .withCredentials(new ProfileCredentialsProvider("myProfile")) .build();

除了同步客户端生成器支持的配置选项外,使用异步客户端可以设置自定义的 ExecutorFactory,以更改异步客户端使用的 ExecutorServiceExecutorFactory 是一个功能接口,所以它能够与 Java 8 lambda 表达式和方法参考进行互操作。

使用自定义执行程序创建异步客户端

AmazonDynamoDBAsync ddbAsync = AmazonDynamoDBAsyncClientBuilder.standard() .withExecutorFactory(() -> Executors.newFixedThreadPool(10)) .build();

使用 DefaultClient

同步和异步客户端生成器都包含名为 defaultClient 的另一个工厂方法。该方法使用默认配置创建服务客户端,即,使用默认提供程序链加载凭证和 AWS 区域。如果不能根据运行应用程序的环境确定凭证或区域,则对 defaultClient 的调用失败。有关如何确定凭证和区域的更多信息,请参阅使用 AWS 凭证AWS 区域选择

创建默认服务客户端

AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();

客户端生命周期

开发工具包中的服务客户端是线程安全的,而且为了获得最佳性能,应该将其作为永久对象。每个客户端均有各自的连接池资源。将显式关闭不再需要的客户端,以避免资源泄漏。

要显式关闭客户端,请调用 shutdown 方法。在调用 shutdown 后,会释放所有客户端资源且客户端不可用。

关闭客户端

AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient(); ddb.shutdown(); // Client is now unusable