Big Query Java客户端的代理设置

问题描述 投票:0回答:1

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

预先感谢

java docker google-cloud-platform google-bigquery http-proxy
1个回答
2
投票

有多种选择可以实现。最干净的方法是告诉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:使用环境变量

您可以直接在Dockerfile中使用环境变量:

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"
   }
 }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.