Estou desenvolvendo um aplicativo da web Spring simples que se comunica com o host remoto e gostaria de testá-lo localmente por meio do proxy corporativo. Eu uso o plugin gradle "Spring Boot" e a questão é como posso especificar as configurações de proxy para JVM?
Eu tentei várias maneiras de fazer isso:
gradle -Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080 bootRun
export JAVA_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"
export GRADLE_OPTS="-Dhttp.proxyHost=X.X.X.X -Dhttp.proxyPort=8080"
Mas parece que nenhum deles funciona - "NoRouteToHostException" coloca o código de "rede". Além disso, adicionei algum código extra para depurar argumentos de início JVM:
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
for (String arg: arguments) System.out.println(arg);
E apenas um argumento foi impresso: "-Dfile.encoding = UTF-8".
Se eu definir a propriedade do sistema no código:
System.setProperty("http.proxyHost", "X.X.X.X");
System.setProperty("http.proxyPort", "8080");
Tudo funciona muito bem!
fonte
args
propriedade.Isso deve passar todas as opções JVM para o aplicativo iniciado via
bootRun
.fonte
No script de compilação gradle, defina systemProperties para a tarefa de execução.
e
gradle run
deve aceitar esse valor.Ou defina uma propriedade de nível de projeto conforme mencionado em http://forums.gradle.org/gradle/topics/how_can_i_provide_command_line_args_to_application_started_with_gradle_run
fonte
@marvin, obrigado pelo seu post foi muito útil.
Compartilhando como eu usei:
Tenho testes JUnit que gostaria de ignorar, a menos que uma propriedade fosse usada para incluir esses testes. Usando JUnit Assume para incluir os testes condicionalmente:
Fazer isso com o gradle exigia que a propriedade do sistema fornecida no momento da execução do gradle build, mostrado aqui,
foi de fato passado para os testes.
Espero que isso ajude outras pessoas a experimentar esta abordagem para executar testes condicionalmente.
fonte
O uso de jvmArgs pode causar problemas de inicialização da JVM. Usar args permite que você passe os argumentos do seu programa personalizado
fonte
Parece funcionar:
fonte
Eu tive um problema semelhante, o bootRun precisava de alguns parâmetros, mas não gostaria de modificar o bootRun, pois quero manter alguma flexibilidade e manter o comportamento bootRun padrão. Minha sugestão é adicionar algumas tarefas personalizadas (digamos bootRunDev, bootRunProxy) que estende bootRun, conforme descrito no seguinte trecho de código
Não tenho um ambiente para exercitar o script, mas usei essa abordagem para passar profile to spring usando a propriedade spring.profiles.active. Os créditos devem ir para Karol Kaliński
fonte