

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Substituir a configuração do cliente de serviço
<a name="override-client-config"></a>

Depois que um [cliente de serviço é criado](creating-clients.md), o cliente de serviço usa uma configuração fixa para todas as operações. No entanto, às vezes você pode precisar substituir a configuração para uma ou mais operações específicas.

Cada cliente de serviço tem uma `withConfig` extensão para que você possa modificar uma cópia da configuração existente. A `withConfig` extensão retorna um novo cliente de serviço com uma configuração modificada. O cliente original existe de forma independente e usa sua configuração original.

O exemplo a seguir mostra a criação de uma `S3Client` instância que chama duas operações.

```
val s3 = S3Client.fromEnvironment {
    logMode = LogMode.LogRequest
    region = "us-west-2"
    // ...other configuration settings...
}

s3.listBuckets { ... }
s3.listObjectsV2 { ... }
```

O trecho a seguir mostra como substituir a configuração de uma única operação. `listObjectV2`

```
s3.withConfig {
    region = "eu-central-1"
}.use { overriddenS3 ->
    overriddenS3.listObjectsV2 { ... }
}
```

As chamadas de operação do `s3` cliente usam a configuração original que foi especificada quando o cliente foi criado. Sua configuração inclui o [registro de solicitações](logging.md#sdk-log-mode) e `us-west-2 region` para a região. 

A `listObjectsV2` invocação no `overriddenS3` cliente usa as mesmas configurações do `s3` cliente original, exceto para a Região, que agora é. `eu-central-1`

## Ciclo de vida de um cliente sobrecarregado
<a name="override-client-lifecycle"></a>

No exemplo anterior, o `s3` cliente e o `overriddenS3` cliente são independentes um do outro. As operações podem ser invocadas em qualquer cliente enquanto permanecerem abertas. Cada um usa uma configuração separada, mas pode compartilhar recursos subjacentes (como um mecanismo HTTP), a menos que eles também sejam substituídos. 

Você fecha um cliente com uma configuração substituída e o cliente original separadamente. Você pode fechar um cliente com a configuração substituída antes ou depois de fechar o cliente original. A menos que você precise usar um cliente com configuração substituída por muito tempo, recomendamos que você envolva seu ciclo de vida com o método. `use` O `use` método garante que o cliente seja fechado caso ocorram exceções. 

## Recursos compartilhados entre clientes
<a name="override-client-shared-res"></a>

Quando você cria um cliente de serviço usando`withConfig`, ele pode compartilhar recursos com o cliente original. Por outro lado, quando você cria um cliente usando [FromEnvironment ou o](creating-clients.md#loading-from-the-environment) [configura explicitamente, o cliente usa recursos](creating-clients.md#programmatic-config) independentes. Recursos como mecanismos HTTP e provedores de credenciais são compartilhados, a menos que sejam substituídos no bloco. `withConfig` 

Como o ciclo de vida de cada cliente é independente, os recursos compartilhados permanecem abertos e utilizáveis até que o último cliente seja fechado. Portanto, é importante fechar clientes de serviços substituídos quando não precisar mais deles. Isso evita que recursos compartilhados permaneçam abertos e consumam recursos do sistema, como memória, conexão e ciclos de CPU.

O exemplo a seguir mostra recursos compartilhados e independentes.

Os `overriddenS3` clientes `s3` e compartilham a mesma instância do provedor de credenciais, incluindo sua configuração de cache. Chamadas feitas por meio de credenciais de `overriddenS3` reutilização se o valor em cache ainda estiver atualizado a partir das chamadas feitas pelo cliente. `s3`

 O mecanismo HTTP não é compartilhado entre os dois clientes. Cada cliente tem um mecanismo HTTP independente porque ele foi substituído na `withConfig` chamada.

```
val s3 = S3Client.fromEnvironment {
    region = "us-west-2"
    credentialsProvider = CachedCredentialsProvider(CredentialsProviderChain(...))
    httpClientEngine = OkHttpEngine { ... }
}

s3.listBuckets { ... }

s3.withConfig {
    httpClientEngine = CrtHttpEngine { ... }
}.use { overriddenS3 ->
    overriddenS3.listObjectsV2 { ... }
}
```