Big Query Java 客户端的代理设置

Proxy settings for Big Query Java client

我正在编写一个 Java 应用程序,它与 Big Query API 进行交互,并且还将 运行 在 docker 容器中。我需要帮助为我的应用程序设置 http 和 https。我不确定是否只为 docker 容器指定环境变量就足够了,还是只需要在 java 代码中设置代理,或者两者都需要,我该怎么做。

提前致谢

有多种选择可以实现这一点。最干净的方法是告诉 JVM 使用系统代理并将代理定义为您的 Docker 容器的环境变量。所有选项如下所述。

选项 1:直接在 Java

中设置代理

您可以使用 System.setProperty(String, String):

直接在您的代码中定义代理
System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");

请注意,代理是硬编码的。此解决方案仅在所有环境(本地开发、服务器/云上部署)的代理保持相同的情况下才有效。

选项 2:调用 JVM 时指定代理

您可以在调用虚拟机时将代理设置为命令行参数。您不需要在代码中进行额外的配置。

java -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080 YourApplication

如果设置了环境变量,也可以在此处使用它们。这样代理设置可以根据环境动态变化。

选项 3:使用系统代理

第三个选项是告诉 JVM 使用配置的系统代理(你可以按照下面的描述来做)。这又是通过设置命令行参数来实现的。

java -Djava.net.useSystemProxies=true YourApplication

设置系统代理

要为 Docker 设置系统代理,您还有两个选择。

选项a:使用环境变量

您可以直接在 Docker 文件中使用环境变量:

ENV HTTP_PROXY "http://proxy.example.com:8080"

或者您可以在 docker run 命令中指定环境变量:

docker run --env HTTP_PROXY="http://proxy.example.com:8080" your-container

选项 b:配置 Docker 客户端

在 Docker 客户端上,创建或编辑文件 ~/.docker/config.json 并设置代理:

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:8080"
   }
 }
}

此选项仅配置您的本地客户端,您需要相应地配置其他环境。