【问题标题】:Proxy settings for Big Query Java clientBig Query Java 客户端的代理设置
【发布时间】:2020-02-11 14:50:13
【问题描述】:

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

提前致谢

【问题讨论】:

  • 您的 Docker 容器在哪里运行?在防火墙后面?
  • @TobiasGeiselmann 是的,它在防火墙后面运行。

标签: java docker google-cloud-platform google-bigquery http-proxy


【解决方案1】:

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

选项1:直接在Java中设置代理

您可以使用System.setProperty(String, String) 直接在代码中定义代理:

System.setProperty("http.proxyHost", "proxy.example.com");
System.setProperty("http.proxyPort", "8080");

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多