【问题标题】:Run java with properties from environment variable使用环境变量中的属性运行 java
【发布时间】:2015-02-02 09:12:57
【问题描述】:

在我的应用程序中,我需要通过代理发送 http 请求。在终端中,我通过以下方式启动它:

java -Dhttp.proxyPort=**** -Dhttp.proxyHost=***.***.***.*** -jar app.jar 

在没有 -D 选项的情况下我应该使用什么环境变量来启动我的应用程序,例如

java -jar app.jar

操作系统 Linux。 Java 7。

谢谢!

PS 已经尝试过 JAVA_OPTS、JAVA_OPTIONS、_JAVA_OPTIONS、JAVA_TOOL_OPTIONS...

【问题讨论】:

标签: java ubuntu jvm environment-variables


【解决方案1】:

标准的 Java 可执行文件无法正常工作。 Java 可执行文件无法识别任何用于设置 general JVM 选项的环境变量。

您尝试过的所有这些都是第三方工具、脚本和启动器使用的约定。

据我所知,Java 可执行文件关注的唯一特定于 Java 的环境变量是 CLASSPATH,当您使用 -jar 选项运行 java 时,它会被忽略。


话虽如此,没有什么1阻止你:

  • 创建一个名为 java 的包装脚本,并将其放在标准 java 可执行文件之前的搜索路径中,或者

  • 创建一个名为 java 的 shell 别名。

这样的包装器或别名可以从环境变量中获取 JVM 选项,您可以随意调用它。


1 - ...除了好感:-)

【讨论】:

    【解决方案2】:

    Java 有两种不同的方式将参数传递给程序:

    • 属性,通常在命令行参数中指定(如您的第一个示例),从文件加载或通过代码手动添加。
    • 环境变量,由操作系统中的设置决定。

    这两个概念是分开的;前者不影响后者,反之亦然。因此,您不能通过环境变量来设置属性。

    其他选项包括在运行时加载.properties 文件(假设您的代理此时尚未初始化)或将完整命令(-D 参数和所有)放入 shell 脚本以便于启动。

    【讨论】:

    • 只是一个额外的输入,如果你需要从你的java代码中访问环境变量,从 System.getProperty() 访问它会比 System.getEnv( ) 因为我发现 getEnv 没有在某些机器上返回值。
    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 2011-01-01
    • 2012-11-12
    • 2017-12-26
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多