【发布时间】:2013-11-28 09:45:05
【问题描述】:
我已经搜索了许多使 IPv6 启用以拥有双栈机器 IPv6 的地方。 我发现很多人回答设置 java.net.preferIPv6Addresses=true 默认设置为 false。
我想知道我应该在哪里进行这些更改,即在哪个文件中,或者我必须编写一些 Java 代码才能将其放入。
【问题讨论】:
我已经搜索了许多使 IPv6 启用以拥有双栈机器 IPv6 的地方。 我发现很多人回答设置 java.net.preferIPv6Addresses=true 默认设置为 false。
我想知道我应该在哪里进行这些更改,即在哪个文件中,或者我必须编写一些 Java 代码才能将其放入。
【问题讨论】:
该设置需要进入 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.exe 和javaw.exe 命令当然不要注意JAVA_OPTS 环境变量。
【讨论】:
在运行 java 可执行文件之前,您必须输入您的环境路径。 在 Linux 中
export JAVA_OPTS="-Djava.net.preferIPv4Stack=true" (same for ipv6 )
【讨论】: