【问题标题】:where to set java.net.preferIPv6Addresses = true在哪里设置 java.net.preferIPv6Addresses = true
【发布时间】:2013-11-28 09:45:05
【问题描述】:

我已经搜索了许多使 IPv6 启用以拥有双栈机器 IPv6 的地方。 我发现很多人回答设置 java.net.preferIPv6Addresses=true 默认设置为 false。

我想知道我应该在哪里进行这些更改,即在哪个文件中,或者我必须编写一些 Java 代码才能将其放入。

【问题讨论】:

    标签: java ipv6


    【解决方案1】:

    该设置需要进入 JVM 的系统属性......并且它需要在 Java 类库的相关部分初始化之前存在。

    执行此操作的“防弹”方法是将设置作为命令行参数传递给 JVM;例如

        java -Djava.net.preferIPv6Addresses=true ... com.example.MainClass <args>
    

    您还可以对应用程序进行编码以使用

    注入设置
        System.setProperty("java.net.preferIPv6Addresses", "true");
    

    但您需要确保注入足够快1,这不是小事。

    1 - “很快”是指在 JVM 网络代码的静态初始化发生之前。这在复杂的应用程序中可能难以实现。请注意Network Properties 文档中的说明:“有些仅在 VM 启动时检查一次,因此 最好设置 使用 java 命令的 -D 选项...”。请注意,它并没有说明这些属性只能以这种方式设置。


    使用JAVA_OPTS 环境变量的建议仅适用于某些应用程序。 JAVA_OPTS 的处理将在启动 JVM 之前在应用程序的启动器或包装器脚本中进行。 _JAVA_OPTIONS 也是如此……这是我以前从未见过的。

    (如果您使用的应用程序已正确记录,则其文档应说明如何指定需要传递给java.exe 启动器的选项。)

    标准的java.exejavaw.exe 命令当然不要注意JAVA_OPTS 环境变量。

    【讨论】:

      【解决方案2】:

      在运行 java 可执行文件之前,您必须输入您的环境路径。 在 Linux 中

      export JAVA_OPTS="-Djava.net.preferIPv4Stack=true" (same for ipv6 )
      

      【讨论】:

      • 我是在windows机器上做的,所以变量名应该是什么。
      • 转到:我的电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 在系统变量下创建一个名为 JAVA_OPTS 和相应值的新变量 -Djava...
      • 它是 _JAVA_OPTIONS 而不是 JAVA_OPTS
      • 实际上,它是特定于应用程序的。如果实现了,那么它是由应用程序的自定义启动器 exe 或脚本实现的。
      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 2020-03-07
      • 2016-12-25
      • 1970-01-01
      • 2019-01-05
      相关资源
      最近更新 更多