Как установить java.net.preferIPv4Stack = true во время выполнения? - PullRequest
32 голосов
/ 27 марта 2012

Мне нужно отключить IPv6. Для этого в документации Java указывается настройка свойства jvm java.net.preferIPv4Stack=true.

.

Но я не понимаю, как это сделать из самого кода.

Многие форумы демонстрировали это из командной строки, но мне нужно делать это во время выполнения.

Ответы [ 6 ]

48 голосов
/ 27 марта 2012

Вы можете использовать System.setProperty("java.net.preferIPv4Stack" , "true");

Это эквивалентно передаче его в командной строке через -Djava.net.preferIPv4Stack=true

9 голосов
/ 31 марта 2014

Я столкнулся с этой самой проблемой, пытаясь отправить почту с помощью javax.mail из веб-приложения на веб-сервере, работающем под управлением Java 7. Внутренние почтовые серверы потерпели неудачу из-за "недоступности сети", несмотря на то, что telnet и ping работают с одного хоста, и пока работали внешние почтовые серверы. Я пытался

System.setProperty("java.net.preferIPv4Stack" , "true");

в коде, но это не удалось. Таким образом, значение параметра, вероятно, было ранее кэшировано системой. Установка аргумента VM

-Djava.net.preferIPv4Stack=true

в скрипте запуска веб-сервера сработало.

Еще одно свидетельство: в очень маленькой целевой тестовой программе установка системного свойства в коде сработала . Таким образом, параметр, вероятно, кэшируется при использовании первого Socket, вероятно, не только при запуске JVM.

9 голосов
/ 19 июля 2012

Другой подход, если вы в отчаянии и не имеете доступа к (а) коду или (б) командной строке, тогда вы можете использовать переменные окружения:

http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html.

Специально для веб-запуска java установите переменную среды:

JAVAWS_VM_ARGS

и для апплетов:

_JPI_VM_OPTIONS

например,

_JPI_VM_OPTIONS = -Djava.net.preferIPv4Stack = true

Кроме того, в Windows общие параметры (для общих приложений Java) можно установить на странице плана управления Java на вкладке «Java».

3 голосов
/ 28 декабря 2014

хорошо

Я использовал System.setProperty("java.net.preferIPv4Stack" , "true");, и он работает с JAVA, но не работает на JBOSS AS7.

Вот мое решение вокруг,

Добавьте указанную ниже строку в конец файла $ {JBOSS_HOME} /bin/standalone.conf.bat (сразу после :JAVA_OPTS_SET)

set "JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true"

Примечание: перезапустите сервер JBoss

0 голосов
/ 12 июля 2016

вы можете установить переменную окружения JAVA_TOOL_OPTS следующим образом, которая будет выбрана JVM для любого приложения.

установить JAVA_TOOL_OPTS = -Djava.net.preferIPv4Stack = true

Вы можете установить это из командной строки или установить в системных переменных среды, в зависимости от ваших потребностей.Обратите внимание, что это отразится на всех Java-приложениях, которые работают на вашем компьютере, даже если это Java-интерпретатор, который вы используете в частной установке.

0 голосов
/ 30 сентября 2015

System.setProperty не работает для апплетов. Потому что JVM уже работает до запуска апплета. В этом случае мы используем параметры апплета как это:

    deployJava.runApplet({
        id: 'MyApplet',
        code: 'com.mkysoft.myapplet.SomeClass',
        archive: 'com.mkysoft.myapplet.jar'
    }, {
        java_version: "1.6*", // Target version
        cache_option: "no",
        cache_archive: "",
        codebase_lookup: true,
        java_arguments: "-Djava.net.preferIPv4Stack=true"
    },
       "1.6" // Minimum version
    );

Вы можете найти deployJava.js на https://www.java.com/js/deployJava.js

...