

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 的程式碼中設定服務用戶端 AWS SDK for Java 2.x
<a name="configuring-service-clients-code"></a>

除了[在外部設定服務用戶端](configuring-service-clients-ext.md)之外，您也可以以程式設計方式在程式碼中設定它們。

透過在程式碼中設定服務用戶端，您可以精細控制許多可用的選項。您也可以在外部設定的大多數組態，以程式碼設定。

## 程式碼中的基本組態
<a name="conf-service-client-code-basic"></a>

例如，下列程式碼片段會將程式碼中 Amazon S3 服務用戶端 AWS 區域 `EU_SOUTH_2`的 設定為 ：

```
S3Client s3Client = S3Client.builder()
        .region(Region.EU_SOUTH_2)
        .build();
```

上一個程式碼片段顯示靜態原廠方法 `builder()`。`builder()` 方法會傳回可讓您自訂服務用戶端的`builder`物件。流暢的設定程式方法會傳回`builder`物件 - 在此情況下為[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3ClientBuilder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3ClientBuilder.html)執行個體 - 以便您可以鏈結方法呼叫，以方便使用且更易於讀取的程式碼。設定所需的屬性之後，請呼叫 `build()`方法來建立用戶端。

## 程式碼中的進階組態
<a name="conf-service-client-code-several"></a>

下列程式碼片段顯示其他組態選項：

```
ClientOverrideConfiguration clientOverrideConfiguration =
        ClientOverrideConfiguration.builder()
                .apiCallAttemptTimeout(Duration.ofSeconds(1))
                .addMetricPublisher(CloudWatchMetricPublisher.create())
                .build();

S3Client s3Client = S3Client.builder()
        .region(Region.EU_SOUTH_2)
        .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
        .overrideConfiguration(clientOverrideConfiguration)
        .httpClientBuilder(
                ApacheHttpClient.builder()
                        .maxConnections(100)
                        .connectionTimeout(Duration.ofSeconds(5))
                        .proxyConfiguration(ProxyConfiguration.builder()
                                .endpoint(URI.create("http://proxy:8080"))
                                .build())
        ).build();
```

在先前的程式碼片段中，您可以看到數個用於設定服務用戶端的進入點：
+ 提供所有服務用戶端通用組態選項的[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.Builder.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.Builder.html)。這些設定是獨立於任何 HTTP 實作 AWS的特定行為。
+ **透過單獨的 HTTP 用戶端建置器實作進行 HTTP 用戶端組態。**`ApacheHttpClient.Builder` 是一個範例。服務用戶端提供 `httpClientBuilder()`方法，將設定的 HTTP 用戶端與服務用戶端建立關聯。
+ **[用戶端建置器](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3ClientBuilder.html)本身的方法，例如 **`region()`和 `credentialsProvider()`

### 使用組態區塊的相同組態
<a name="service-client-config-lambda"></a>

 AWS SDK for Java 2.x 提供接受 lambda 表達式的方法，以內嵌建置這些物件，而不是建立單獨的物件，然後將它們傳遞給服務用戶端方法。建置器上的組態方法名稱相同，但簽章不同。例如：
+ [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(software.amazon.awssdk.core.client.config.ClientOverrideConfiguration)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(software.amazon.awssdk.core.client.config.ClientOverrideConfiguration))
+ [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(java.util.function.Consumer)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/core/client/builder/SdkClientBuilder.html#overrideConfiguration(java.util.function.Consumer))

先前顯示使用此方法的 S3 用戶端組態可以在一個程式碼區塊中完成：

```
S3Client s3Client = S3Client.builder()
        .region(Region.EU_SOUTH_2)
        .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
        .overrideConfiguration(b -> b
                .apiCallAttemptTimeout(Duration.ofSeconds(1))
                .addMetricPublisher(CloudWatchMetricPublisher.create()))
        .httpClientBuilder(ApacheHttpClient.builder()
                .maxConnections(100)
                .connectionTimeout(Duration.ofSeconds(5))
                .proxyConfiguration(ProxyConfiguration.builder()
                        .endpoint(URI.create("http://proxy:8080"))
                        .build()))
        .build();
```

## 程式碼中無法使用的組態選項
<a name="conf-servic-client-only-ext"></a>

由於下列設定會影響 SDK 中的基本初始化程序，因此您只能在外部設定下列組態設定，不能在程式碼中設定：

### 檔案位置設定
<a name="code-only-conf-file-loc"></a>

這些設定會控制共用組態和登入資料檔案的位置，而且在 SDK 載入之後，無法以程式設計方式覆寫它們：
+ **AWS\$1CONFIG\$1FILE** （環境變數） / **aws.configFile**(JVM 系統屬性）
+ **AWS\$1SHARED\$1CREDENTIALS\$1FILE** （環境變數） / **aws.sharedCredentialsFile** (JVM 系統屬性）

這些設定必須在軟體開發套件載入組態檔案之前設定，因為它們會決定軟體開發套件尋找組態的位置。軟體開發套件初始化後，變更這些值不會有任何影響。

### 執行個體中繼資料服務停用
<a name="code-only-conf-imds"></a>
+ **AWS\$1EC2\$1METADATA\$1DISABLED** （環境變數） / **aws.disableEc2Metadata** (JVM 系統屬性）

此設定會控制 SDK 是否完全嘗試使用 EC2 執行個體中繼資料服務。軟體開發套件初始化後，您就無法以程式設計方式變更此設定。

### 設定檔選擇
<a name="code-only-conf-profile"></a>
+ **AWS\$1PROFILE** （環境變數） / **aws.profile** (JVM 系統屬性）

此設定會告知軟體開發套件要從共用組態和登入資料檔案載入哪些設定檔。載入後，變更此值不會有任何影響。

### 容器登入資料路徑
<a name="code-only-conf-container-cred-path"></a>
+ **AWS\$1CONTAINER\$1CREDENTIALS\$1RELATIVE\$1URI**
+ **AWS\$1CONTAINER\$1CREDENTIALS\$1FULL\$1URI**
+ **AWS\$1CONTAINER\$1AUTHORIZATION\$1TOKEN**
+ **AWS\$1CONTAINER\$1AUTHORIZATION\$1TOKEN\$1FILE**

您可以使用這些環境變數來告知 SDK 如何從容器服務擷取登入資料。在服務用戶端初始化期間建立登入資料提供者鏈結之後，您就無法變更這些設定。

### 預設 HTTP 實作選擇
<a name="code-only-conf-http-impl"></a>
+ **SYNC\$1HTTP\$1SERVICE\$1IMPL** （環境變數） / **software.amazon.awssdk.http.service.impl** (JVM 系統屬性）
+ **ASYNC\$1HTTP\$1SERVICE\$1IMPL** （環境變數） / **software.amazon.awssdk.http.async.service.impl** (JVM 系統屬性）

除非在個別服務用戶端的程式碼中覆寫，否則這些全域設定會決定 SDK 用於所有服務用戶端的 HTTP 用戶端實作。您必須在 SDK 初始化其 HTTP 用戶端之前設定這些項目，之後就無法變更。