

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

# 使用 JVM 系统属性进行全局配置和 适用于 Java 的 AWS SDK 适用于 Kotlin 的 AWS SDK
<a name="jvm-system-properties"></a>

[JVM 系统属性](https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html)提供了另一种方法来指定在 JVM 上运行 SDKs 的配置选项和凭据，例如 适用于 Java 的 AWS SDK 和。 适用于 Kotlin 的 AWS SDK有关支持的 JVM 系统属性的列表 SDKs，请参阅[设置参考](settings-reference.md#JVMSettings)。

**选项的优先顺序**
+ 如果您使用 JVM 系统属性来指定某个设置，则会覆盖环境变量中找到的或从共享的 AWS `config` 和 `credentials` 文件中加载的任何值。
+ 如果您使用环境变量指定某个设置，则会覆盖从共享的 AWS `config` 和 `credentials` 文件中加载的任何值。

## 如何设置 JVM 系统属性
<a name="jvm-sys-props-set"></a>

您可以通过多种方式设置 JVM 系统属性。

### 通过命令行
<a name="jvm-sys-props-set-cl"></a>

使用 `-D` 开关调用 `java` 命令时通过命令行设置 JVM 系统属性。除非在代码中显式覆盖该值，否则以下命令将为所有服务客户端进行 AWS 区域 全局配置。

```
java -Daws.region=us-east-1 -jar <your_application.jar> <other_arguments>
```

如果需要设置多个 JVM 系统属性，请多次指定 `-D` 开关。

### 使用环境变量
<a name="jvm-sys-props-set-evar"></a>

如果您无法访问命令行调用 JVM 来运行应用程序，则可以使用 `JAVA_TOOL_OPTIONS` 环境变量来配置命令行选项。这种方法对于在 Java 运行时上运行 AWS Lambda 函数或在嵌入式 JVM 中运行代码等情下非常实用。

除非您在代码中明确覆盖该值，否则以下示例将为所有服务客户端进行 AWS 区域 全局配置。

------
#### [ Linux, macOS, or Unix ]

```
$ export JAVA_TOOL_OPTIONS="-Daws.region=us-east-1"
```

设置环境变量会更改使用的值，直到 Shell 会话结束或直到您将该变量设置为其他值。通过在 shell 的启动脚本中设置变量，可使变量在未来的会话中继续有效。

------
#### [ Windows Command Prompt ]

```
C:\> setx JAVA_TOOL_OPTIONS -Daws.region=us-east-1
```

使用 `[set](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1)` 设置环境变量会更改使用的值，直到当前命令提示符会话结束，或者直到您将该变量设置为其他值。使用 [https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx) 设置环境变量会更改当前命令提示符会话和运行该命令后创建的所有命令提示符会话中使用的值。它***不*** 影响在运行该命令时已经运行的其他命令 shell。

------

### 在运行时上
<a name="jvm-sys-props-set-runtime"></a>

您也可以使用以下示例所示的 `System.setProperty` 方法，通过代码在运行时上设置 JVM 系统属性。

```
System.setProperty("aws.region", "us-east-1");
```

**重要**  
所有 JVM 系统属性都应在初始化 SDK 服务客户端*之前*设置，否则服务客户端可能会使用其他值。