我正在开发与远程主机进行通信的简单Spring Web应用程序,我想在公司代理之后在本地对其进行测试。我使用“ Spring Boot” gradle插件,问题是 如何为JVM指定代理设置?
我尝试了几种方法来做到这一点:
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"
但是似乎它们都不起作用-“ NoRouteToHostException”抛出“网络”代码。另外,我添加了一些额外的代码来调试JVM启动参数:
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean(); List<String> arguments = runtimeMxBean.getInputArguments(); for (String arg: arguments) System.out.println(arg);
并且仅打印一个参数:“-Dfile.encoding = UTF-8”。
如果我在代码中设置系统属性:
System.setProperty("http.proxyHost", "X.X.X.X"); System.setProperty("http.proxyPort", "8080");
一切正常!
原始答案(使用Gradle 1.12和Spring Boot 1.0.x):
在bootRunspring启动gradle这个插件的任务延长了gradle这个JavaExec任务。看到这个。
bootRun
这意味着您可以通过添加以下命令来配置插件以使用代理:
bootRun { jvmArgs = "-Dhttp.proxyHost=xxxxxx", "-Dhttp.proxyPort=xxxxxx" }
到您的构建文件。
当然,您可以使用systemProperties代替jvmArgs
systemProperties
jvmArgs
如果要从命令行有条件地添加jvmArgs,则可以执行以下操作:
bootRun { if ( project.hasProperty('jvmArgs') ) { jvmArgs project.jvmArgs.split('\\s+') } } gradle bootRun -PjvmArgs="-Dwhatever1=value1 -Dwhatever2=value2"
更新的答案:
在使用 Spring Boot 1.2.6.RELEASE 和 Gradle 2.7 尝试上述解决方案后,我发现它无法正常工作,因为其中提到了一些注释。但是,可以进行一些小的调整以恢复工作状态。
新的代码是:
bootRun { jvmArgs = ["-Dhttp.proxyHost=xxxxxx", "-Dhttp.proxyPort=xxxxxx"] }
对于硬编码的参数,以及
bootRun { if ( project.hasProperty('jvmArgs') ) { jvmArgs = (project.jvmArgs.split("\\s+") as List) } }
用于从命令行提供的参数