

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

# 在中使用 AWS 共享配置文件 AWS SDK for Java 2.x
<a name="credentials-profiles"></a>

使用共享 `config` 和 `credentials` 文件，您可以设置多个配置文件。这使您的应用程序能够使用多组凭证配置。前面提到的 `[default]` 配置文件。SDK 使用该[ProfileCredentialsProvider](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/ProfileCredentialsProvider.html)类从共享`credentials`文件中定义的配置文件加载设置。

以下代码片演示如何使用名为 `my_profile` 的配置文件中定义的设置来生成服务客户端。

```
Region region = Region.US_WEST_2;
DynamoDbClient ddb = DynamoDbClient.builder()
      .region(region)
      .credentialsProvider(ProfileCredentialsProvider.create("my_profile"))
      .build();
```

## 将另一个配置文件设置为默认配置文件
<a name="set-a-custom-profile-as-the-default"></a>

要将 `[default]` 配置文件以外的另一个配置文件设置为应用程序的默认配置文件，请将 `AWS_PROFILE` 环境变量设置为自定义配置文件的名称。

要在 Linux、macOS 或 Unix 上设置这些变量，请使用 `export`：

```
export AWS_PROFILE="other_profile"
```

要在 Windows 上设置这些变量，请使用 `set`：

```
set AWS_PROFILE="other_profile"
```

或者，将 `aws.profile` Java 系统属性设置为配置文件的名称。

## 重新加载配置文件凭证
<a name="profile-reloading"></a>

对于其生成器上具有 `profileFile()` 方法的任何凭证提供程序，您都可以将其配置为能够重新加载配置文件凭证。这些凭证配置文件类是：`ProfileCredentialsProvider`、`DefaultCredentialsProvider`、`InstanceProfileCredentialsProvider` 和 `ProfileTokenProvider.`

**注意**  
配置文件凭证的重新加载仅适用于配置文件中的以下设置：`aws_access_key_id`、`aws_secret_access_key` 和 `aws_session_token`。  
诸如 `region`、`sso_session`、`sso_account_id` 和 `source_profile` 之类的设置将被忽略。

要将支持的凭证提供程序配置为重新加载配置文件设置，请为 `profileFile()` 生成器方法提供一个 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/profiles/ProfileFileSupplier.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/profiles/ProfileFileSupplier.html) 实例。以下代码示例演示的 `ProfileCredentialsProvider` 将从 `[default]` 配置文件重新加载凭证设置。

```
ProfileCredentialsProvider provider = ProfileCredentialsProvider
    .builder()
    .profileFile(ProfileFileSupplier.defaultSupplier())
    .build();

// Set up a service client with the provider instance.
DynamoDbClient dynamoDbClient = DynamoDbClient.builder()
                    .region(Region.US_EAST_1)
                    .credentialsProvider(provider)
                    .build();

/*
    Before dynamoDbClient makes a request, it reloads the credentials settings 
    by calling provider.resolveCredentials().
*/
```

调用 `ProfileCredentialsProvider.resolveCredentials()` 时，适用于 Java 的 SDK 会重新加载设置。`ProfileFileSupplier.defaultSupplier()` 是 SDK 提供的 `ProfileFileSupplier` 的[几种便捷实现](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/profiles/ProfileFileSupplier.html)之一。如果您的用例需要，您可以提供自己的实现。

以下示例演示 `ProfileFileSupplier.reloadWhenModified()` 便利方法的使用。`reloadWhenModified()` 采用一个 `Path` 参数，这使您可以灵活地指定配置的源文件而不是标准 `~/.aws/credentials`（或 `config`）位置。

仅当 SDK 确定文件内容已修改时，才会在调用 `resolveCredentials()` 时重新加载设置。

```
Path credentialsFilePath = ...

ProfileCredentialsProvider provider = ProfileCredentialsProvider
    .builder()
    .profileFile(ProfileFileSupplier.reloadWhenModified(credentialsFilePath, ProfileFile.Type.CREDENTIALS))
    .profileName("my-profile")
    .build();
/*
    A service client configured with the provider instance calls provider.resolveCredential()
    before each request.
*/
```

`ProfileFileSupplier.aggregate()` 方法合并多个配置文件的内容。您可以决定是在每次调用 `resolveCredentials()` 时重新加载文件，还是在首次读取文件时固定其设置。

以下示例演示的 `DefaultCredentialsProvider` 将合并两个包含配置文件设置的文件的设置。每次调用 `resolveCredentials()` 并且设置发生更改时，SDK 都会重新加载 `credentialsFilePath` 变量所指向的文件中的设置。`profileFile` 对象的设置保持不变。

```
Path credentialsFilePath = ...;
ProfileFile profileFile = ...;

DefaultCredentialsProvider provider = DefaultCredentialsProvider
        .builder()
        .profileFile(ProfileFileSupplier.aggregate(
                ProfileFileSupplier.reloadWhenModified(credentialsFilePath, ProfileFile.Type.CREDENTIALS),
                ProfileFileSupplier.fixedProfileFile(profileFile)))
        .profileName("my-profile")
        .build();
/*
    A service client configured with the provider instance calls provider.resolveCredential()
    before each request.
*/
```