

 适用于 Java 的 AWS SDK 1.x于2025年 end-of-support 12月31日达到。我们建议您迁移到 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html) 以继续获得新功能、可用性改进和安全更新。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建服务客户端
<a name="creating-clients"></a>

要向发出请求 Amazon Web Services，请先创建一个服务客户端对象。推荐的方法是使用服务客户端生成器。

每个都 AWS 服务 有一个服务接口，其中包含服务 API 中每个操作的方法。例如，DynamoDB 的服务接口名为。[AmazonDynamoDBClient](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/AmazonDynamoDBClient.html)每个服务接口都有对应的客户端生成器，可用于构建服务接口的实施。的客户端生成器类名 DynamoDB 为 [AmazonDynamoDBClientBuilder](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/dynamodbv2/AmazonDynamoDBClientBuilder.html)。

## 获取客户端生成器
<a name="obtaining-a-client-builder"></a>

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

```
AmazonDynamoDBClientBuilder builder = AmazonDynamoDBClientBuilder.standard();
```

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

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

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

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

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

```
public class DynamoDBClientFactory {
    private final AmazonDynamoDBClientBuilder builder =
        AmazonDynamoDBClientBuilder.standard()
            .withRegion(Regions.US_WEST_2)
            .withCredentials(new ProfileCredentialsProvider("myProfile"));

    public AmazonDynamoDB createClient() {
        return builder.build();
    }
}
```

[该生成器还为[ClientConfiguration](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/ClientConfiguration.html)和提供了流畅的设置器 [RequestMetricCollector](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/metrics/RequestMetricCollector.html)，以及一个包含 2 的自定义列表。RequestHandler](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/handlers/RequestHandler2.html)

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

```
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();
```

## 创建异步客户端
<a name="creating-async-clients"></a>

每个服务（除外） 适用于 Java 的 AWS SDK 都有异步（或异步 Amazon S3）客户端，每个服务都有相应的异步客户端生成器。

### 使用默认值创建异步 DynamoDB 客户端 ExecutorService
<a name="w3aab9c13b9b5"></a>

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

除了同步（或同步）客户端生成器支持的配置选项外，异步客户端还允许您设置自定义[ExecutorFactory](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/client/builder/ExecutorFactory.html)以更改异步客户端`ExecutorService`使用的配置。 `ExecutorFactory`是一个函数式接口，因此它可以与 Java 8 lambda 表达式和方法引用互操作。

### 使用自定义执行程序创建异步客户端
<a name="w3aab9c13b9b9"></a>

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

## 使用 DefaultClient
<a name="using-defaultclient"></a>

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

### 创建默认服务客户端
<a name="w3aab9c13c11b5"></a>

```
AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.defaultClient();
```

## 客户端生命周期
<a name="client-lifecycle"></a>

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

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

### 关闭客户端
<a name="w3aab9c13c13b7"></a>

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